利用map,以一个单词为键,以与它相差一个字母的单词组集作为值的算法编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用map,以一个单词为键,以与它相差一个字母的单词组集作为值的算法编程相关的知识,希望对你有一定的参考价值。
map<string,vector<string> > cAW(const vector<string> &words ) { map<string,vector<string> > adjWords;//要选的map map<int,vector<string> > wordsByLength;//相同个数的单词组 //分组以每个单词的个数为标准 for(int i=0;i<words.size();i++) wordsByLength[words[i].length()].push_back(words[i]); //每一组中的单独操作 map<int,vector<string> >::const_iterator itr; for(itr=wordsByLength.begin();itr!=wordsByLength.end();++itr) { const vector<string> &groupWords=itr->second;//把相同长度n的单词组合赋给groupWords int groupNum=itr->first//将单词长度n的信息赋给groupNum //单独一组中每个位置的单独操作 for(int i=0;i<groupNum;i++) { //清楚被给位置的字符,计算剩下的字符,相同为一组 map<string,vector<string> > repToWord; for(int j=0;j<groupWords.size();j++) { string rep=groupWords[j]; //依次取出这组的每一个单词,赋给rep rep.erase(i,1); //每个单词去掉第i给字符 repToWord[rep].push_back(groupWords[j]); //把剩下的字符作为一个键赋给repToWord,并把这个单词作为值赋给repToWord } //然后找出repToWord中值的数量超过一个的键组 map<string,vector<string> >::const_iterator itr2; for(itr2=repToWord.begin();itr2!=repToWord.end();++itr2) { const vector<string> &clique=itr2->second; //把reToWord中每一个组的单词组取出赋给clique if(clique.size()>=2)//如果每一组中单词的个数大于1个,即可以进行比较 for(int p=0;p<clique.size();p++) for(int q=p+1;q<clique.size();q++) { adjWords[clique[p] ].push_back(clique[q]); adjWords[clique[q] ].push_back(clique[p]);//把每一个单词作为一个键,和它只差了第i个字母的放到这个键组的值中 } } } } return adjWords; }
以上是关于利用map,以一个单词为键,以与它相差一个字母的单词组集作为值的算法编程的主要内容,如果未能解决你的问题,请参考以下文章
boost::unordered_map 中以结构为键的 boost 变体
1160. Find Words That Can Be Formed by Characters 拼写单词 (统计字母数量的常用方法)