欢迎来到CClarence的博客!!

敲代码真的是一件令人感到上瘾的事情,在我二十多年的生活中,除了打DoTa,好像没有其他的另一件事也能让我如此乐此不疲。而前端恰恰是编程与界面的最前沿,它能让快速的让你感受到自己的成果,这是一件多么令人兴奋的事啊!!我希望在两年后我毕业的时候我能真的成为一位前端码农,在五年后我能成为一位NB的前端码农!!
----------CClarence写于2015年入冬。

001

利用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;
}

 

posted @ 2016-01-25 11:42  CClarence  阅读(328)  评论(0编辑  收藏  举报