《编程珠玑》之变位词查找
2014-05-29 01:55
169 查看
朴素的方法就是将匹配词和字典里面的词都排序比较,相同则输出,代码如下:
不过由于每次变换一个词都需要重新排一次序,采用变位词与标识捆绑的方法,将字典重新排序,后利用二分实现上下界的快速查找,这样就不必每次都要把字典遍历一遍了,同样是牺牲空间换取时间的方法,代码:
#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;
}
#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;
}
相关文章推荐
- “《编程珠玑》(第2版)第1章”:查找一个数列中缺失的一个整数
- 编程珠玑---读书笔记---使用后缀数组查找最长重复子串
- 编程珠玑第2章:排序、二分查找、签名、向量平移
- “《编程珠玑》(第2版)第2章”:C题(查找变位词,排序)
- 插入查找元素效率问题——《编程珠玑》读书笔记
- 《编程珠玑》第二章2.1 二分查找不存在的数
- 查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 编程珠玑第八章——习题10查找数组中总和最接近0的子数组
- 编程珠玑第2章:排序、二分查找、签名、向量平移
- 编程珠玑第9章二分搜索(有重复数字)中查找某数出现的第一个位置
- 编程珠玑第十三章----查找
- 转载:查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 《编程珠玑》第二章三个问题A---查找40亿个32位整数中缺失的某个整数
- 查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 编程珠玑---读书笔记---使用后缀数组查找最长重复子串
- 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
- 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
- 9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置
- c++二分查找—来自编程珠玑