判断子序列
给定字符串 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;
}