编程珠玑--变位词集合

有一步是必须处理的,就是对字符串进行排序;

第二步的方法就比较多:(1)采用字符串哈希(求值)(2)排序后转化为24位的位向量(3)直接排序后的字符串作为标识(书上的方法)


 1 #include <iostream>
2 #include <string>
3 #include <fstream>
4 #include <map>
5 #include <algorithm>
6 #include <vector>
7
8 using namespace std;
9
10
11 int main()
12 {
13 ifstream dic("in.txt");
14 vector<pair<string, string> > words_pair;
15 string word, word_sign;
16 while(dic >> word) {
17 word_sign = word;
18 sort(word_sign.begin(), word_sign.end());
19 words_pair.push_back(pair<string, string>(word_sign, word));
20 }
21
22 sort(words_pair.begin(), words_pair.end());
23 vector<pair<string, string> >::const_iterator iter;
24 string pre = "";
25 for (iter = words_pair.begin(); iter != words_pair.end(); iter++){
26 if (pre != "" && (*iter).first != pre) {
27 cout << endl;
28 }
29 cout << (*iter).second << " ";
30 pre = (*iter).first;
31 }
32
33 cout << endl;
34 return 0;
35 }


haired
hardier harried
trihedra
hardwire
airshed dashier hardies shadier
airsheds radishes
hardiest
ravished
dishware rawhides
hayrides
airthed
rawhide
hayride hydriae

以上是in.txt的内容

时间: 2024-08-11 19:46:35

编程珠玑--变位词集合的相关文章

【编程珠玑】【第二章】问题C

变位词(anagrams):指的是组成两个单词的字符相同,但位置不同的单词.比如说,abbcd和abcdb就是一对变位词.在介绍问题c之前,我们先看看如何判断两个字符串是否是变位词. 分析:求解题目C有两种思路: [思路一] 由于变位词只是字母的顺序改变,字符长度,字符种类没有改变,所以根据此我们只要重新根据字典序排序一下,两个字符串也就一样了.如abcbd和acdbb是一对变位词,按照字典序排序之后他们都变成了abbcd.这种方法的时间效率根据你使用的排序算法不同而不同,基于比较的排序的时间复

第8周读书笔记-读《编程珠玑》有感

读<编程珠玑>有感 <编程珠玑>(后文简称<珠玑>)在序章中就开宗明义地提出了两个问题:一个是如何对实际问题进行抽象,找出问题的独特性质.二是一个富有意思的小题目:"如何在1MB内存内对0~10^7内若干元素组成的集合内的整数进行排序(10s内)".一开始我想到的是归并排序,但是书中提出可以利用位图的位向量,不用考虑任何排序算法,只需要遍历两次即可,忽然就有茅塞顿开之感,从这个简单的例子中就可以对一些思想窥见一斑:位图数据结构.简单的设计.时间-空间

《编程珠玑》

第1章 开篇 问题: 输入: 一个最多包含n个正整数的文件,每个数都小于n,其中n=107.如果在输入文件中有任何整数重复出现就是致命错误.没有其它数据与该整数相关联. 输出: 按升序排列的输入整数的列表. 约束: 最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用.运行时间最多几分钟,运行时间10秒就不需要进一步优化了. 解决方案: 位向量     //phase 1:initialize set to empty         for i = [0,n)            

《编程珠玑》---笔记。浏览此文,一窥此书。

第一章: 磁盘排序:对于一个提出的问题,不要未经思考就直接给出答案.要先深入研究问题,搞清楚这个问题的特点,根据这个特点,可能有更好的解决方案. 比如:文中:最初的需求只是"我如何对磁盘文件排序". 我们首先想到了经典的归并排序. 但,进一步了解到排序的内容是10000000个记录,每条记录都是一个7位整数,且只有1M可用的内存.每条记录不相同. [位示图法,详见我的关于排序的博文] 第二章: 三个问题: 1.给定一个包含32位整数的顺序文件,它至多只能包含40亿个这样的整数,并且整数

《编程珠玑》高清pdf版

下载地址:网盘下载 作者简介 编辑 Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobb's Joumal杂志的特约编辑,他的"编程珠玑"专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上. 目录 编辑 第一部分 基础 第1章 开篇 1.1 一次友好的对话 1.2 准确的问题描述 1.3 程序设计 1.4

变位词的查找(上)

本文也同步发表在我的公众号"我的天空" 这次我们聊一个比较有意思的话题:变位词的查找,这个话题在<编程珠玑>中出现,此书很经典,偏向于算法,大家如果能通读的话,肯定受益匪浅!   什么是变位词 不同的单词,如果其组成的字母相同的话,那么这些单词就互为变位词,譬如pots.stop. tops这三个单词就是互为变位词,都是由字母p.o.t.s组成,但是"pot" 就不与上述单词互为变位词,其缺少字母s,"potss"也不是,其多了一个字

编程珠玑 第2版 pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是计算机科学方面的经典名著.书的内容围绕程序设计人员面对的一系列实际问题展开.作者Jon Bentley 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的.本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路.本书对各个层次的程序员都具有很高的阅读价值.. 多年以来,当程序员们推选

编程珠玑高清pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 作者简介编辑Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobb's Joumal杂志的特约编辑,他的“编程珠玑”专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上.目录编辑第一部分 基础 第1章 开篇 1.1 一次友好的对话 1.2 准确的问题描述 1.3 程序设计 1.4

编程珠玑番外篇

1.Plan 9 的八卦 在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因为一行简单的配置之后, 你就可以像使用本机文件一样使用远程的任何文件. 无论是想编辑, 查看还是删除重命名, 都和本机文件一样的用. 这么神奇的功能到底如何