找复合单词

题意:

You are to find all the two-word compound words in a dictionary. A two-word compound word is a
word in the dictionary that is the concatenation of exactly two other words in the dictionary.

Input
    Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will
be no more than 120,000 words.

Output
   Your output should contain all the compound words, one per line, in alphabetical order.

Sample Input
a
alien
born
less
lien
never
nevertheless
new
newborn
the
zebra

Sample Output
alien
newborn

思路:

一个字:拆!(不知为何如此想笑,笑cry)。用集合set把全部的单词存起来,然后把每个单词都拆开。

譬如:newborn。第一次拆成n和ewborn,然后进行判断在set里面能否找到这两个单词,不能就继续拆,

第二次ne和wborn。。。。直到new跟born。详细代码如下:

源代码:

 1 #include<iostream>
 2 #include<string>
 3 #include<set>
 4 #include<sstream>
 5 using namespace std;
 6 set<string>dict;
 7 set<string>dicc;         //定义两个集合
 8 int main()
 9 {
10     string str;
11     do
12     {
13         getline(cin, str);
14         dict.insert(str);
15     } while (str.length() > 0);         //输入单词,以空行结束,把每个单词都存进集合中
16
17
18     for (set<string>::iterator it = dict.begin(); it != dict.end(); it++)  //迭代器遍历每个单词
19     {
20         string a = *it;                                                     //把其中一个单词取出来,拆!
21         for (int i = 1; i < a.length(); i++)
22         {
23             string frist = a.substr(0, i);                                   //把一个单词拆成两部分
24             string next = a.substr(i, a.length());
25
26             if (dict.find(frist) != dict.end() && dict.find(next) != dict.end())  //判断两个子单词是否在集合里
27             {
28                 cout << a << endl;                                //找到了!就输出~~~~~~~
29                 break;
30             }
31         }
32
33     }
34
35     //system("pause");
36     return 0;
37 }

心得:

本题有两个思路,一个是拆,那么另一个就是拼,拆的思路上面讲了,至于拼,就是每两个单词都拼一次,然后用迭代器在set找找。能找到,你就是棒棒哒(=_=然而我现在还没写出来,默默看着。。。。),集合以前没用过,这道题用了以后才觉得好神奇,整个单词可以看成一个元素insert到set去,需要用时再用迭代器取出来。迭代器从头遍历到尾的功能也可以省下很多代码,但是感觉还不是很熟练。(亲~别忘了头文件)

本题还用了一个取字符串的函数substr函数,(从第几个数开始取,到上面时候结束)

格式:substr(string,start,length)

每天学点知识还是挺开心的~~~~~~(^ω^)

时间: 2024-12-28 10:09:27

找复合单词的相关文章

【华为OJ】【073-查找兄弟单词】

[华为OJ][算法总篇章] [华为OJ][073-查找兄弟单词] [工程下载] 题目描述 输入描述 先输入字典中单词的个数,再输入n个单词作为字典单词. 输入一个单词,查找其在字典中兄弟单词的个数 再输入数字n 输出描述 根据输入,输出查找到的兄弟单词的个数 输入例子 3 abc bca cab abc 1 输出例子 2 bca 算法实现 import java.util.*; /** * Author: 王俊超 * Date: 2016-01-05 14:49 * All Rights Res

华为机试—字符串中找出单词排序

题目: 在给定字符串中找出单词( "单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如果整个输入的字符串中没有找到单词,请输出空串.输出的单词之间使用一个"空格"隔开,最后一个单词后不加空格. 要求实现函数: void my_word(charinput

华为机试—给定字符串中找出单词

题目: 在给定字符串中找出单词("单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如果整个输入的字符串中没有找到单词,请输出空串.输出的单词之间使用一个"空格"隔开,最后一个单词后不加空格. 要求实现函数: void my_word(charinput[

字典树 找出单词文件中出现次数前十的单词

import java.io.*; import java.util.*; /** * 不区分大小写 */ class TrieNode{ TrieNode[] next = new TrieNode[26]; // 只有小写字母的字典树 0存放a 1存放b ... 25存放z int count = 0;//字母出现的次数 int wordCount = 0;// 单词出现的次数 char currentChar; public TrieNode(char word) { this.curre

网格找单词

在一个网格中使用已知的单词表将所有出现在单词表中的单词都找出来 代码如下 //使用Java编写 import java.util.ArrayList; import java.util.TreeSet; public class 网格找单词 { //存储要找单词的集合 static TreeSet<String> ts=new TreeSet<String>(); //字母网格 static char[][] word={ {'t','h','i','s'}, {'w','a','

[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

洛谷-统计单词数-简单字符串

题目描述 Description 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.  现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置.注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章 中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 ). 输入输出格式 Input/out

UVA 10391(把符合单词输出,map)

Compound Words Time Limit: 3000ms                        Memory Limit: 131072KB [PDF Link] Problem E: Compound Words You are to find all the two-word compound words in a dictionary. A two-word compound word is a word in the dictionary that is the con

[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