给定两个字符串s和t判断s是否是t的子序列
时间: 2023-05-31 11:05:14 浏览: 86
题目描述:
给定两个字符串 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$的长度。
最长公共子序列问题:给定两个字符串,求它们的最长公共子序列
最长公共子序列问题可以通过动态规划算法来解决。
定义一个二维数组 dp,其中 dp[i][j] 表示字符串 s1 的前 i 个字符和字符串 s2 的前 j 个字符的最长公共子序列的长度。
状态转移方程如下:
当 s1[i-1] == s2[j-1] 时,说明当前字符可以作为最长公共子序列的一部分,因此 dp[i][j] = dp[i-1][j-1] + 1。
当 s1[i-1] != s2[j-1] 时,说明当前字符不能作为最长公共子序列的一部分,因此需要去掉 s1 的最后一个字符或者去掉 s2 的最后一个字符,取它们的最大值,即 dp[i][j] = max(dp[i-1][j], dp[i][j-1])。
最终结果为 dp[m][n],其中 m 和 n 分别为字符串 s1 和 s2 的长度。
以下是 Python 代码实现:
```
def longest_common_subsequence(s1, s2):
m, n = len(s1), len(s2)
dp = [[0] * (n+1) for _ in range(m+1)]
for i in range(1, m+1):
for j in range(1, n+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
return dp[m][n]
```
例如,对于字符串 s1 = "abcde" 和 s2 = "ace",最长公共子序列为 "ace",长度为 3。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)