题目:
给定某字符串,判断该字符串中是否包含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; }