392. 判断子序列

76 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

一、题目描述:

392. 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

示例 1:

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

示例 2:

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

提示:

  • 0 <= s.length <= 100
  • 0 <= t.length <= 10^4
  • 两个字符串都只由小写字符组成。

二、思路分析

对于两个字符串,判断其中一个字符串是否是另外一个字符串的子序列,可以采用循环迭代+单指针的方式实现判断,能够简单快速实现功能

以最短字符串为基准,循环迭代,分别获取位置由小到大的字符;

设置字符串t的指针位置index,用于判断s的字符是否处于字符串t中的指针位置index到字符串尾部;

如果s的字符处于字符串t的指定字符串范围中,则index加1,不断重复该操作;

如果s的字符不处于字符串t的指定字符串范围中,则直接返回false;

三、AC 代码:

class Solution {
    public boolean isSubsequence(String s, String t) {
        if(s.length() > t.length()) return false;
        int index = 0;
        for(int i=0;i<s.length();i++){
            // if exists next index positioin
            if((index = t.indexOf(String.valueOf(s.charAt(i)),index) + 1) == 0){
                return false;
            }
        }
        return true;
    }
}

范文参考

判断子序列 后续挑战 哈希+二分法 Python3 - 判断子序列 - 力扣(LeetCode)

python3实现,常规双指针解法 + 借助迭代器和生成器 - 判断子序列 - 力扣(LeetCode)