引入
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)
进阶:
如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?
示例
输入:s = “abc”, t = “ahbgdc”
输出:true
输入:s = “axc”, t = “ahbgdc”
输出:false
解法1- 贪心法
使用两个指针同时遍历s和t序列,每次贪心地匹配,匹配成功则 i i i 和 j j j同时右移,匹配下一个位置,匹配失败则 j j j右移, i i i不变,尝试用 t t t的下一个字符匹配s,最后如果i移动到s的末尾,就说明s是t的子序列
class Solution {
public:
bool isSubsequence(string s, string t) {
int n = s.length(), m = t.length();
int i = 0, j = 0;
while (i < n && j < m) {
if (s[i] == t[j]) {
i++;
}
j++;
}
return i == n;
}
};