c++ dfs+set

算法思路

采用dfs对输入待查字符串中的字符进行排序,返回的所有字符串结果去掉与其相同的就是所有的兄弟单词,但是由于字符串中存在重复元素,所以需要用set集合去重

具体代码实现

using namespace std;
char c[11];
bool st[12];
set<string>v;
void dfs(int u,int a,string s){
    if(u==a){
        string ss=c;
        if(strcmp(ss.c_str(),s.c_str())!=0){
          v.insert(ss);
        }
        return ;
    }
    for(int i=0;i<s.size();i++){
        if(!st[i]){
            c[u]=s[i];
            st[i]=true;
            dfs(u+1,a,s);
            st[i]=false;
        }
    }
}
int main(){
    int n,k;
    cin>>n;
    vector<string >vs,vs1;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        vs.push_back(s);
    }
    string s1;
    cin>>s1>>k;
    dfs(0,s1.size(),s1);
    for(int i=0;i<vs.size();i++){
        if(v.find(vs[i])!=v.end()){
            vs1.push_back(vs[i]);
        }
    }
    cout<<vs1.size()<<endl;
    if(k<vs1.size()){
        sort(vs1.begin(),vs1.end());
        cout<<vs1[k-1]<<endl;
    }
    return 0;
}