MLE dfs
#include <bits/stdc++.h>
using namespace std;
const string str="Hello,World!",mode="Helo,Wrd!";
void dfs(int x,string ans){
if (x==(int)str.length()&&ans==str) cout<<ans;
for (int i=0;i<(int)mode.length();i++) dfs(x+1,ans+mode[i]);
}
int main(){
dfs(0,"");
return 0;
}
MLE dfs+二分
#include <bits/stdc++.h>
using namespace std;
const string str="Hello,World!",mode="!,HWdelor";
void dfs(int x,string ans){
if (x==(int)str.length()&&ans==str) cout<<ans;
int l=0,r=mode.length()-1;
while (l<r){
int mid=(l+r)/2;
dfs(mid,ans+mode[mid]);
if (mode[mid]>str[x]) r=mid-1;
else if (mode[mid]<str[x]) l=mid+1;
}
}
int main(){
dfs(0,"");
return 0;
}
所以怎么 TLE qwq