leetcode 392 判断子序列

要使字符串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;
    }
}
原文地址:https://www.cnblogs.com/sjh-dora/p/12884551.html