利用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;
}
时间: 2024-08-04 18:31:28

利用map,以一个单词为键,以与它相差一个字母的单词组集作为值的算法编程的相关文章

Java-map-第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录

第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年份,请参考本章附录. 附录 历届世界杯冠军 届数 举办年份 举办地点 冠军 第一届 1930年 乌拉圭 乌拉圭 第二届 1934年 意大利 意大利 第三届 1938年 法国 意大利 第四届 1950年 巴西 乌拉圭 第五届 1954年 瑞士 西德 第六届 1958年 瑞典 巴西 第七届 1962年

利用map和reduce编写一个str2float函数,把字符串&#39;123.456&#39;转换成浮点数123.456:

from functools import reduce CHAR_TO_FLOAT = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '.': -1 } def str2float(s): nums=map(lambda x:CHAR_TO_FLOAT[x],s) #print(list(nums)) point = 0 def str_division(f,n): nonlo

【cas】利用Map返回更多信息

在cas中默认获取的用户信息为登录时填写的登录用户名,但是如果我不想返回登录的用户名,返回其他的信息呢? 一.将登录用户的id作为默认值 显示 首先在cas server中找到deployerConfigContext.xml配置文件中关于认证信息配置的地方即name="credentialsToPrincipalResolvers",这里是 关于返回用户信息所对应的类.默认执行的是下面这个类. <bean class="org.jasig.cas.authentica

初学Python之利用map编写姓名格式化输出函数

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.例如输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']. 代码: #定义一个list L = [] #设置名字的个数 n = int(raw_input("Please enter the number of the name:")) #利用循环将名字追加到list里面 for num in range(n):     names = raw

给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列

问题 给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列.规则如下: 一次只能改变一个字母 中间单词必须在字典里存在 例如: 给出 start = "hit"end = "cog"dict = ["hot","dot","dog","lot","log"] 返回 [ ["hit","hot",&

[ACM] POJ 1035 Spell checker (单词查找,删除替换增加任何一个字母)

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   Accepted: 6844 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given word

学会用这二个键,你就是电脑高手了,一个是Win键,另一个是Ctrl!

学会用这二个键,你就是电脑高手了,一个是windows键,另一个是Ctrl键. 一.windows键 1. 很多时候,需要离开座位去做别的事情,如果对自己的电脑安全很重视,不妨按住windows键后,再按L键,这样电脑就直接锁屏了,这样就不用担心电脑的资料外泄啦! 2. 要找电脑上的文件时,一般人会先找到“我的电脑”,然后点击打开,而高手总是很酷的,轻轻按下键盘上的Windows键不放然后再按E键,直接打开电脑的资源管理器,而一般人还在慢慢寻找“我的电脑”的图标呢,嗯,高手就是这样直接把一般人给

关于创建主键和索引的关系一个小小测试

创建主键时,所对应的列如果没有索引,数据库默认会自动创建一个索引:如果对于列有索引,那么创建主键不会再创建索引.这里要注意,列值必须满足主键的要求(唯一,非空),简单测试如下: SQL> create table wxlun_pri(a number); Table created. SQL> alter table wxlun_pri add constraint PRIMARY_KEY_REPLY primary key (a);     ------创建主键约束 Table altere

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();