判断子序列
判断子序列
一、题目描述
给定一个字符串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();
}
}
浙公网安备 33010602011771号