判断子序列

给定字符串 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;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值