一开始没看清楚题目,以为是KMP字符串的模式匹配,还特地翻数据结构的书来复习一下。确实KMP有点难理解。
不过看清楚之后发现这不是连续子串,只要满足子串的条件就可以了,并不需要连续。所以实现代码也很简单,具体如下:
class Solution {
public:
bool isSubsequence(string s, string t) {
if (s.length() == 0) return true ;
if (t.length() < s.length()) return false ;
int j = 0, i = 0 ;
int lt = t.length() ;
int ls = s.length() ;
for (;i < lt; i++) {
if (t[i] == s[j]) j++ ;
if (j >= ls) return true ;
}
return false ;
}
};
注意一下两个串的长度的问题就好了。虽然我不知道有没有坑,不过我之前被其他的题目坑过好几次。
设主串的长度为n,总的时间复杂度就为O(n)。
虽然这道题目的tag里有“dynamic programming”,但我不知道这和DP有什么关系...