给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶: 如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T
的子序列。在这种情况下,你会怎样改变代码?
bool isSubsequence(char * s, char * t){
int s_len = strlen(s);
int t_len = strlen(t);
bool dp[s_len+1];
dp[0] = true;
for(int i = 1, j = 0; i <= s_len; i++)
{
dp[i] = false;
for(; j < t_len; j++)
{
if(s[i-1] == t[j] && dp[i-1] == true)
{
dp[i] = true;
j++;
break;
}
}
}
return dp[s_len];
}
思路:双指针
转化问题为字符串s中的每个字符与字符串t的字符玩消消乐,s可以消除完就是true,不可以即为false