题目:
给定某字符串,判断该字符串中是否包含HelloWorld,出现HelloWorld不一定要连续,但顺序不变,如“HeByello,ByeWorByeld”就包含“HelloWorld”。
思路:
通过i,j来遍历两个字符串str1,str2(HelloWorld),假设长度分别为m,n;
当i>m或者j>n,则不包含;
当i<m且j==n-1,且str1[i]==str2[j],则包含;
当i<m且j<n,如果str1[i]==str2[j],i++,j++;否则,i++;
可以通过递归来实现,也可以通过循环来实现,详见代码。
代码:
#include<iostream>
using namespace std;
void IsHelloWorld(
string word1,
string word2,
int i,
int j,
bool &
flag){
int m=
word1.size();
int n=
word2.size();
if(i>=m || j>=
n)
return;
if(j==n-
1){
if(word1[i]==
word2[j])
flag=
true;
}
else if(word1[i]==
word2[j])
IsHelloWorld(word1,word2,i+
1,j+
1,flag);
else
IsHelloWorld(word1,word2,i+
1,j,flag);
}
bool IsHelloWorld_Recursive(
string word1,
string word2){
int m=
word1.size();
int n=
word2.size();
if(m<
n)
return false;
bool flag=
false;
IsHelloWorld(word1,word2,0,
0,flag);
return flag;
}
bool IsHelloWorld(
string word1,
string word2){
int m=
word1.size();
int n=
word2.size();
int i=
0;
int j=
0;
while(i<m && j<
n){
if(j==n-
1){
if(word1[i]==
word2[j])
return true;
}
else if(word1[i]==
word2[j]){
i++
;
j++
;
}
else
i++
;
}
return false;
}
int main(){
string word1=
"HeMylloHelloNameWorIsldHAHA";
string word2=
"HelloWorld";
cout<< IsHelloWorld_Recursive(word1,word2) <<
endl;
cout<< IsHelloWorld(word1,word2) <<
endl;
return 0;
}
转载于:https://www.cnblogs.com/AndyJee/p/4789994.html
相关资源:数据结构—成绩单生成器