谷歌有做网站建设网站新闻页设计
1.题目
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶:
如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?
2.示例

3.思路
双指针:
 设置两个指针,一个T指针指向T并且遍历t,另一个有效位指针Sindex指向s初始位置,当数组中两者值相等时候S指针下移一位,当有效位指针一旦到达s字符串长度则返回true,否则返回false
4.代码
LeetCode代码:
class Solution {public boolean isSubsequence(String s, String t) {int sIndex = 0;if(s.length() == 0){return true;}for (int i=0;i<t.length();i++){if (s.charAt(sIndex)==t.charAt(i)){sIndex++;if(sIndex == s.length()){return true;}}}return false;}
} 

案例详细代码:
package LeetCode11;public class javaDemo {public static void main(String[] args) {String s = "a";String t = "ahbgdc";boolean flag = false;//        S字符串有效位指针int sIndex = 0;
//        判断是否为特殊情况即s若为空,则直接输出trueif (s.equals("")){System.out.println(true);}else {
//            不是特殊情况则进行双指针判断for (int i=0;i<t.length();i++){
//                判断是否值相等if (s.charAt(sIndex)==t.charAt(i)){sIndex++;
//                    如果sIndex遍历完,也就意味着存在子序列输出flag并即使跳出防止越界if (sIndex == s.length()){flag = true;break;}}}}System.out.println(flag);}
}
 
时间复杂度为O(n),空间复杂度为O(1)
