给定两个字符串a、b,问字符串a是否是字符串b的子序列。 我们将b的子序列a,定义为字符串a在字符串b中不一定连续,但顺序一定不变。 例如abcdef的子序列为abc、abd,而baf则不是abcdef的子序列。
时间: 2023-02-13 17:42:48 浏览: 118
如果要判断字符串 a 是否是字符串 b 的子序列,可以遍历字符串 b,并且用两个指针分别指向字符串 a 和 b。如果当前指向的字符相同,就将指向字符串 a 的指针向后移动一位;否则只移动指向字符串 b 的指针。最后,如果指向字符串 a 的指针指向字符串 a 的最后一个字符,那么字符串 a 就是字符串 b 的子序列。
例如:
```
a = "abc"
b = "abcdef"
a_pointer = 0
b_pointer = 0
while a_pointer < len(a) and b_pointer < len(b):
if a[a_pointer] == b[b_pointer]:
a_pointer += 1
b_pointer += 1
if a_pointer == len(a):
print("a is a subsequence of b")
else:
print("a is not a subsequence of b")
```
这段代码的时间复杂度是 O(n),其中 n 是字符串 b 的长度。
相关问题
给定两个字符串s和t判断s是否是t的子序列
题目描述:
给定两个字符串 s 和 t ,判断 s 是否为 t 的子序列。
示例:
s = "abc", t = "ahbgdc",返回 true
s = "axc", t = "ahbgdc",返回 false
思路:
遍历字符串 t,如果字符与 s 中的字符相同,则 s 中指针后移,直到 s 遍历完,返回 true。如果 t 遍历完,s 还没有遍历完,返回 false。
Python代码:
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
i, j = 0, 0
while i < len(s) and j < len(t):
if s[i] == t[j]:
i += 1
j += 1
return i == len(s)
C语言给定两个字符串s和t判断s是否是t的子序列
思路:
- 定义两个指针i和j,分别指向s和t的开头。
- 遍历t,如果当前字符等于s的字符,则i和j同时后移;否则只将j后移。
- 如果i指针到达了s的末尾,则s是t的子序列;否则如果j指针到达了t的末尾,则s不是t的子序列。
代码实现:
```c
bool isSubsequence(char * s, char * t){
int i = 0, j = 0;
while (s[i] && t[j]) {
if (s[i] == t[j]) {
i++;
j++;
} else {
j++;
}
}
return !s[i];
}
```
时间复杂度:$O(n)$,其中$n$为$t$的长度。