= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:示例 1:输入:s = “abc”, t = “ahbgdc”输出:true。">
赞
踩
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶:
如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?
示例 1:
输入:s = “abc”, t = “ahbgdc”
输出:true
class Solution {
// 动态规划
public boolean isSubsequence(String s, String t) {
int m = t.length();
int n = s.length();
if (n == 0) {
return true;
}
boolean[][] dp = new boolean[m + 1][n + 1];
for (int i = 0; i <= m; i++) {
dp[i][0] = true;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (t.charAt(i) == s.charAt(j)) {
dp[i + 1][j + 1] = dp[i][j];
} else {
dp[i + 1][j + 1] = dp[i][j + 1];
}
}
}
return dp[m][n];
}
}
或
class Solution {
// 双指针
public boolean isSubsequence(String s, String t) {
int m = t.length();
int n = s.length();
int i = 0, j = 0;
while (i < m && j < n) {
if (t.charAt(i) == s.charAt(j)) {
j++;
}
i++;
}
if (j == n) {
return true;
}
return false;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。