CodeTop100 Day18
52、最长的有效括号
括号问题需要考虑栈,而最长有效的括号就要考虑动态规划了
这里定义dp[i]为以i-1位置结尾的最长合法括号字串
遍历字符串,当遇到左括号,压入栈,dp[i+1]=0,遇到右括号,如果栈不为空,配对左括号索引,
长度为len=i+1-leftIndex+dp[出栈左括号位置],dp[i+1]=len,如果栈为空dp[i+1]=0;
返回dp数组的最大值
53、训练计划II
该题跟删除链表中倒数第n个节点一个套路,定义两个指针,第一个指针先走cnt步,后面指针开始移动,慢指针最后的位置就是n-cnt就是倒数第cnt的位
54、最小覆盖字串
滑动窗口题,定义两个map储存字符,left=0,right=0,标记位valild=0,外层循环是right<s.length(),右指针移动,如果当前字符符合t数组中的字符串,则窗口map将该值加进去,如果窗口中的对该字符等于元字符所需要的个数,valid就++,例如,t中A需要1个,right找到满足包含t字符串的子字符就停止移动,然后收缩left,将左指针指向的字符串移走,然后更新长度,每次记录下最短的长度和开始位置,返回最小字串即可