题目
给定字符串 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;}
}