给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"
是"abcde"
的一个子序列,而"aec"
不是)。
示例 1:
输入:s = "abc", t = "ahbgdc" 输出:true
示例 2:
输入:s = "axc", t = "ahbgdc" 输出:false
解题
思路:创建两个指针left和right(left指向字符串s,right指向字符串t),刚开始的时候left和right都指向字符串的开头。在循环的过程中当s.charAt(left)==t.charAt(right)时,left++;right++;否则right++ ;当left>s.length()或者right>t.length();退出循环
同时我在这里进行判断当s的长度>t的长度时,返回false;当s的长度等于t的长度时,若s.equals(t)返回true,否则返回false
那么如何进行返回成为问题的关键
我的思路:当此时left!=s.length()-1时 返回false 否则返回right 但是这样做是错误的
若s ="acb" t ="ahbgdc" 我的返回是true,但实际是false
因为当s.charAt(left)==t.charAt(right)时,left会增加 此时left==s.length()-1
所以正确的返回是left!=s.length()时 返回false 否则返回right
代码如下:
int left=0,right=0;
int m=s.length();
int n=t.length();
if(m>n)
return false;
else if(m==n)
{
if s.equals(t)
return true;
else
return false;
}
else
{
while(left<m&& right<n){
if(s.charAt(left)==t.charAt(right)
left++;
right++;
}
if(left!=m)
return false;
else
return true;
}