判断子序列()

判断子序列

一、题目描述

给定一个字符串s和t,判断是否为t的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变字符相对位置形成新的字符串。
示例1

输入:s = "abc", t = "ahbgdc"
输出:true

示例2

输入:s = "axc", t = "ahbgdc"
输出:false

二、解题思路

子序列t包含再字符串中,且子序列t中的字符顺序和字符串s中的字符相同。

三、解题方法

方法1(双指针)
同时指向两个字符串的第一个位置。当两个字符相等时,同时移向下一位。否则将s的指针移动一位即可。最后只需判断s的指针走到了最后一整个位置没。
代码实现

class Solution {
    public boolean isSubsequence(String s, String t) {
        int index1 = 0;
        int index2 = 0;
        
        for(int i = 0;i<t.length();i++){

            if(s.length() == index1){
                break;
            }
            
            if(s.charAt(index1) == t.charAt(index2)){
                index2++;
                index1++;
            }else{
                index2++;
            }
        }

        return index1 == s.length();
    }
}

方法2(队列)
将s字串入队,然后遍历t字符串,如果s队列中的字符和t字符串中字符相等时,则将s队头元素出队,最后判断队列中有无元素即可。
代码实现

class Solution {
    public boolean isSubsequence(String s, String t) {
        char[] str = new char[s.length()];
        int index1 = 0;
        int index2 = 0;
        
        for(int i = 0;i<t.length();i++){

            if(s.length() == index1){
                break;
            }

            char s1 = s.charAt(index1);
            char s2 = t.charAt(index2);
            
            if(s1 == s2){
                index2++;
                index1++;
            }else{
                index2++;
            }
        }

        return index1 == s.length();
    }
}
————————

判断子序列

一、题目描述

给定一个字符串s和t,判断是否为t的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变字符相对位置形成新的字符串。
示例1

输入:s = "abc", t = "ahbgdc"
输出:true

示例2

输入:s = "axc", t = "ahbgdc"
输出:false

二、解题思路

子序列t包含再字符串中,且子序列t中的字符顺序和字符串s中的字符相同。

三、解题方法

方法1(双指针)
同时指向两个字符串的第一个位置。当两个字符相等时,同时移向下一位。否则将s的指针移动一位即可。最后只需判断s的指针走到了最后一整个位置没。
代码实现

class Solution {
    public boolean isSubsequence(String s, String t) {
        int index1 = 0;
        int index2 = 0;
        
        for(int i = 0;i<t.length();i++){

            if(s.length() == index1){
                break;
            }
            
            if(s.charAt(index1) == t.charAt(index2)){
                index2++;
                index1++;
            }else{
                index2++;
            }
        }

        return index1 == s.length();
    }
}

方法2(队列)
将s字串入队,然后遍历t字符串,如果s队列中的字符和t字符串中字符相等时,则将s队头元素出队,最后判断队列中有无元素即可。
代码实现

class Solution {
    public boolean isSubsequence(String s, String t) {
        char[] str = new char[s.length()];
        int index1 = 0;
        int index2 = 0;
        
        for(int i = 0;i<t.length();i++){

            if(s.length() == index1){
                break;
            }

            char s1 = s.charAt(index1);
            char s2 = t.charAt(index2);
            
            if(s1 == s2){
                index2++;
                index1++;
            }else{
                index2++;
            }
        }

        return index1 == s.length();
    }
}