题目描述:
解题思路:
1、第一种方法:indexOf(int ch, int fromIndex),利用API,从字符的一开始往后面寻找,看另一个字符串里是否含有,找到一个后,为了保证顺序,index更新为index+1。
参考代码:
public static boolean isSubsequence(String s, String t) {
char[] c=s.toCharArray();
int index=-1;
for (int i = 0; i < c.length; i++) {
//挨着查找,每次找到后,从下一个在开始寻找,
index=t.indexOf(c[i], 1 + index);
//没找到返回false
if(index==-1)
return false;
}
return true;
}
2、第二种方法,双指针。两个指针分别从字符串开头往后面扫描,如果一致,同时后移,如果不一致,让t字符串继续后移,s还是不动,最后判断的条件就是如果i==s.length();说明循环到最后都满足条件,s字符串已经扫描完了,返回true。否则返回false;
参考代码:
//方法二、双指针
//双百
public static boolean isSubsequence2(String s,String t){
int i=0;
int j=0;
char[] c=s.toCharArray();
char[] ch=t.toCharArray();
while (i<c.length&&j<ch.length)
{
if(c[i]==ch[j])
{
i++;
}
j++;
}
if(i==c.length)//最后比较相等的时候,我们也+1了,所以应该比较当i==c.length的
return true;
return false;
}
//官方题解二分
public boolean isSubsequence3(String s,String t){
int n=s.length();
int m=t.length();
int i=0,j=0;
while (i<n&&j<m){
if(s.charAt(i)==t.charAt(j))
{
i++;
}
j++;
}
return i==n;
}