每日一题 7.27
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
示例 1:
s = “abc”, t = “ahbgdc”
返回 true.
示例 2:
s = “axc”, t = “ahbgdc”
返回 false.
思路:
我们初始化两个指针 i 和 j ,分别指向 s 和 t 的初始位置。每次贪心地匹配,匹配成功则 i 和 j 同时右移,匹配 s 的下一个位置,匹配失败则 j 右移,i 不变,尝试用 t 的下一个字符匹配 s。
最终如果 i 移动到 s的末尾,就说明 s 是 t 的子序列。
代码:
#include <stdio.h>
#include <string.h>//字符串所需包
#include <stdbool.h>//bool所需包
bool isSubsequence(char *s, char *t) {
int n = strlen(s), m = strlen(t);
int i = 0, j = 0;//定义两个指针
while (i < n && j < m) {
if (s[i] == t[j]) {
i++;
}
j++;
}
printf("%d",i==n);//%d指十进制数字
}
int main() {
isSubsequence("abcdc", "asdabcd");
}
复杂度分析:
- 时间复杂度:O(m + n)
- 空间复杂度:O(1)
温馨提示: 遵纪守法, 友善评论!