题解 | #查找兄弟单词#
查找兄弟单词
http://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
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;
}