您的位置:首页 > 编程语言

《编程珠玑》之变位词查找

2014-05-29 01:55 169 查看
朴素的方法就是将匹配词和字典里面的词都排序比较,相同则输出,代码如下:
#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

int main(){
char dic[5][10]={ "acd","adc","dac","abbb","asd" }; //字典
char word[]={"adc"}; //变位词
sort(word,word+3);
for(int i=0; i<5; i++){
char temp[10];
strcpy(temp,dic[i]);
sort(temp,temp+strlen(temp));
if(strcmp(word,temp)==0){
cout<<dic[i]<<endl;
}
}

return 0;
}

不过由于每次变换一个词都需要重新排一次序,采用变位词与标识捆绑的方法,将字典重新排序,后利用二分实现上下界的快速查找,这样就不必每次都要把字典遍历一遍了,同样是牺牲空间换取时间的方法,代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;

int main(){
string dic[10]={ "acd","adc","dac","abbb","asd","acde","edac","dace","deac","cad" };
string word="adc";
vector < pair<string,string> > vec;
sort(word.begin(),word.end());
for(int i=0; i<10; i++){
string temp = dic[i];
sort(temp.begin(),temp.end());
vec.push_back(make_pair(temp,dic[i]));
}
vector < pair<string,string> >::iterator it;
it = lower_bound(vec.begin(),vec.end(),make_pair(word,word));
while(it->first==word){
cout<<it->second<<endl;
it++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐