要使字符串s的排序要和字符串t的排序一致,我们只需考虑两个要素
- 当字符'a'出现,判断字符传t中是否存在字符'a'
- t中字符‘a'之后的剩余字符串是否存在’b'
用一句通俗的话就是剩余字符串中是否存在下一个字符;利用贪心算法的概念就是局部是否存在最优解。剩余字符串是否存在字符。
注意区分几个字符方面的函数:charAt以及indexOf
方法一:不使用库函数,直接一个一个遍历比较
class Solution { public boolean isSubsequence(String s, String t) { int i=0; for(char ch:s.toCharArray() ){ while(i<t.length()&&t.charAt(i)!=ch) i++; i++;//如果找到了相应的字符也要继续往后 } //这里i为什么会是=呢?因为有可能到字符的最后一个的时候i=t.length()-1,但是后面有一个i++;所以这个时候要为<= return i<=t.length()?true:false; } }
方法二:使用库函数,进一步简化,但思想仍然为一个一个比较是否存在
class Solution { public boolean isSubsequence(String s, String t) { // int i=0; // for(char ch:s.toCharArray() ){ // while(i<t.length()&&t.charAt(i)!=ch) i++; // i++;//如果找到了相应的字符也要继续往后 // } // //这里i为什么会是=呢?因为有可能到字符的最后一个的时候i=t.length()-1,但是后面有一个i++;所以这个时候要为<= // return i<=t.length()?true:false; int j=-1; for(char ch:s.toCharArray() ){ //确定从当前的位置继续往后进行寻找 j=t.indexOf(ch,j+1); //如果找不到说明非子串 if(j==-1) return false; } return true; } }