LeetCode.392.Is Subsequence 判断是否子序列

题目描述

392 Is Subsequence https://leetcode-cn.com/problems/is-subsequence/

Given a string s and a string t, check if s is subsequence of t.

You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and s is a short string (<=100).

A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ace" is a subsequence of "abcde" while "aec" is not).

Example 1:

s = "abc", t = "ahbgdc"
Return true.

Example 2:

s = "axc", t = "ahbgdc"
Return false.

Follow up: If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code?


解题过程

判断字符串 s 是否字符串 t 的子序列,子序列是可以不重复的,只要顺序一致即可。 双指针,相等时前进,结束后s中每个元素都依次找到t中相等的元素就是true 时间复杂度 O(n) 空间复杂度 O(1)

private static class SolutionV2020 {
    public boolean isSubsequence(String s, String t) {
        if (null == s || null == t) {
            return null == s;
        }
        char[] ss = s.toCharArray();
        char[] tt = t.toCharArray();
        int i = 0, j = 0;
        for (; i < ss.length && j < tt.length; j++) {
            if (ss[i] == tt[j]) {
                i++;
            }
        }
        return i == ss.length;
    }
}

GitHub代码

algorithms/leetcode/leetcode/_392_IsSubsequence.java https://github.com/masikkk/algorithms/blob/master/leetcode/leetcode/_392_IsSubsequence.java