Leetcode——判断子序列 / 判断子串

Posted Yawn,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——判断子序列 / 判断子串相关的知识,希望对你有一定的参考价值。

1. 判断子序列

(1)双指针

使用两个指针分别指向两个字符串的起始索引,每次循环判断两个指针指向的字符是否相等,相等则两个指针向右移动,不相等则只移动 s 的指针。最后如果 t 指针移动到末尾,则 t 是为 s 的子序列。

class Solution {

    public boolean isSubsequence(String t, String s) {
        int indext = 0, indexs = 0;
        while (indext < t.length() && indexs < s.length()) {
            if (t.charAt(indext) == s.charAt(indexs)) {
                indext++;
            }
            indexs++;
        }
        return indext == t.length();
    }
}

(2)使用API

直接使用 indexOf 方法,判断从指定下标起,是否存在字符 c。不存在,则 t 不是为 s 的子序列

class Solution {
    
    public boolean isSubsequence(String t, String s) {
        int index = -1;
        for (int i = 0; i < t.length(); i++) {
        	//从index + 1开始获取字符t.charAt(i)在s中的的位置
            index = s.indexOf(t.charAt(i), index + 1);		
            if (index == -1) {
                return false;
            }
        }
        return true;
    }
}

2. 判断子串

(1) contains

方法返回true,当且仅当此字符串包含指定的char值序列

public static void main(String[] args) {
 
        String str = "abc";
 
        boolean status = str.contains("a");
 
        if(status){
            System.out.println("包含");
 
        }else{
            System.out.println("不包含");
        }
 
    }

(2)indexOf方法

java.lang.String.indexOf() 的用途是在一个字符串中寻找一个字的位置,同时也可以判断一个字符串中是否包含某个字符
indexOf的返回值为int

public static void main(String[] args) {
    String str1 = "abcdefg";
    int result1 = str1.indexOf("ab");
    if(result1 != -1){
        System.out.println("字符串str中包含子串“ab”"+result1);
    }else{
        System.out.println("字符串str中不包含子串“ab”"+result1);
    }
}

3. 找出字符串中子序列

(1)无重复元素时:

class Solution {
    List<List<Integer>> result = new ArrayList<>();// 存放符合条件结果的集合
    Deque<Integer> path = new LinkedList<>();// 用来存放符合条件结果

    public List<List<Integer>> subsets(int[] nums) {
        if (nums.length == 0){
            result.add(new ArrayList<>());
            return result;
        }
        backTracking(nums, 0);
        return result;
    }

    private void backTracking(int[] nums, int startIndex){
        //「遍历这个树的时候,把所有节点都记录下来,就是要求的子集集合」。
        result.add(new ArrayList<>(path));
        if (startIndex >= nums.length){         //终止条件可不加
            return;
        }
        for (int i = startIndex; i < nums.length; i++){
            path.add(nums[i]);
            backTracking(nums, i + 1);
            path.removeLast();
        }
    }
}


(2)有重复元素时:

4. 找字符串中所有子串

以上是关于Leetcode——判断子序列 / 判断子串的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 最长回文子串

LeetCode 无重复字符的最长子串

#yyds干货盘点# leetcode算法题:判断子序列

LeetCode 392 判断子序列[贪心] HERODING的LeetCode之路

LeetCode | 0392. Is Subsequence判断子序列Python

LeetCode 0392. 判断子序列