判断s1是不是s2的字串 //这个字串不是连续字串
本来想迭代,不过循环不好处理
也没想到什么高效的算法
干脆递归了
每次从母串中的第n个位置查找字串中的下一个字符
查找到了递归处理下一个,直到母串or字串结束
母串结束时字串未结束return false
母串未结束字串结束了return true
要是没查到呢?
return false
这时上一级不会直接return,而是continue查找
直到世界尽头(什么鬼
咳咳,是直到母串结束
递归就是简洁有木有
有木有
效率的话
是o(母串长度*字串长度)
还能接受
常系数就不要考虑了~~~
这题坑点之一是没有给串的限定长度
第一次RE
然后往大了开
然后TLE
我在循环里面用strlen,想想也是蛮拼的有没有
从循环里拿出来,就AC了
#include<cstdio>
#include<cstring>
using namespace std;
char big[100005];
char small[100005];
int s,b;
bool f(int n,int la){
if(n==s)
return true;
for(int i=la;i<b;i++)
if(big[i]==small[n] && f(n+1,i+1))
return true;
return false;
}
int main(){
while(~scanf("%s %s",&small,&big)){
s=strlen(small);
b=strlen(big);
printf("%s\n",f(0,0)?"Yes":"No");
}
return 0;
}