题目大意
https://leetcode.com/problems/longest-valid-parentheses/
给你一个字符串只含(
和)
,求出这个字符串的所有满足正确括号匹配原则的子串的最大子串长度。
题目分析
最开始自己拿栈实现,没有写对,隐约觉得O(n)可以实现,看了一下geeksforgeeks上的正确解法。确实用栈O(n)实现。思路是这样:
https://leetcode.com/problems/longest-valid-parentheses/
给你一个字符串只含(
和)
,求出这个字符串的所有满足正确括号匹配原则的子串的最大子串长度。
最开始自己拿栈实现,没有写对,隐约觉得O(n)可以实现,看了一下geeksforgeeks上的正确解法。确实用栈O(n)实现。思路是这样:
https://leetcode.com/problems/distinct-subsequences/
给你字符串s和t,计算s中有多少个子序列与t相等
比较基础的动态规划,最开始我用记忆化搜索,导致递归层数太多,栈溢出。只能用递推方程了,方程不难,直接看代码理解一下。
https://leetcode.com/problems/bitwise-and-of-numbers-range/
给你整数区间[m,n], 0 <= m <= n <= 2147483647,求这个区间所有数字并运算的结果。
不要暴力求解,要逐位去考虑。参考discuss区做法,首先对每一位来说,如果最后结果为1,那么这个区间的所有整数在这一位上都是1,结果为0,证明至少有一个数字在此位为0。又注意到是一个连续区间。其实连续区间上的并运算的结果就是区间上所有数字二进制表示的公共首部,也就是区间最小和最大的公共首部,因此移位计算一下就好了。
https://leetcode.com/problems/interleaving-string/
给你三个字符串s1,s2,s3,判断s3是否由s1和s2交错形成的,看看下面例子理解一下
|
|
第一种方法是动态规划解决,递推方程可以看代码理解一下,还是比较简单。第二种方法是用记忆化搜索,也比较好理解