9.子序列

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

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
思路:就像题中描述一般子序列是需要顺序的,所以当匹配字符串和目标字符串的某一位匹配后,那么匹配字符串的下一个字符要和目标字符串最后一次匹配成功的位置之后,所以可以设置一个变量用于记录记录当前最后一次匹配成功的位置。如果匹配字符遍历到了最后说明匹配成功。

#include<iostream>
#include<string>
using namespace std;
bool issubsequence(string a,string b);
int main()
{
    cout << issubsequence("ahc","ahbgdc");
    return 0;
}
bool issubsequence(string a,string b)
{
   int p=0;//记录最后一次匹配成功的位置
   for(int i=0;i<a.size();i++)//遍历匹配字符串
   {
     int j;
     for(j=p;j<b.size();j++)//遍历目标字符串
       if(a[i]==b[j])
       {
         p=j+1;
         break;
       }
     if(j==b.size())
       return false;
   }
   return true;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值