开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
一、题目描述:
给定字符串 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;
}
}
范文参考: