Anagrams

描述

Most crossword puzzle(猜字谜) fans are used to anagrams(字谜) --groups of words with the same letters in different orders--for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this attribute, no matter how you rearrange their letters, you cannot form another word. Such words are called ananagrams( 变位词*)*, an example is QUIZ.

Obviously such definitions depend on the domain(领域) within which we are working; you might think that ATHENE is an ananagram, whereas any chemist would quickly produce ETHANE. One possible domain would be the entire English language, but this could lead to some problems. One could restrict the domain to, say, Music, in which case SCALE becomes arelative ananagram (LACES is not in the same domain) but NOTE is not since it can produce TONE.

Write a program that will read in the dictionary of a restricted domain and determine the relative ananagrams. Note that single letter words are, ipso facto, relative ananagrams since they cannot be ``rearranged'' at all. The dictionary will contain no more than 1000 words.

输入

Input will consist of a series of lines. No line will be more than 80 characters long, but may contain any number of words. Words consist of up to 20 upper and/or lower case letters, and will not be broken across lines(跨行中断). Spaces may appear freely around words, and at least one space separates multiple words on the same line. Note that words that contain the same letters but of differing case are considered to be anagrams of each other, thus tIeD and EdiT are anagrams. The file will be terminated by a line consisting of a single #.

输出

Output will consist of a series of lines. Each line will consist of a single word that is a relative ananagram in the input dictionary. Words must be output in lexicographic(字典式的) (case-sensitive) order. There will always be at least one relative ananagram.

样例输入
ladder came tape soon leader acme RIDE lone Dreis peat
 ScAlE orb  eye  Rides dealer  NotE derail LaCeS  drIed
noel dire Disk mace Rob dries
#
样例输出
Disk
NotE
derail
drIed
eye
ladder
soon

思路

用到两种数据结构map和set,map存入单词(在转换为小写且按照字母升序顺序后),set存入输入的单词

code

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
#include<set> 
#include<sstream>
using namespace std;

int main()
{
    string input;
    map<string, int> mp;
    set<string> st;
    while (getline(cin, input) && input != "#") {
        istringstream is(input);
        string word;
        while (is >> word) {
            string word1 = word;
            transform(word1.begin(), word1.end(), word1.begin(), ::tolower);//将单词转换为小写
            sort(word1.begin(), word1.end());
            mp[word1]++;
            st.insert(word);
        }
    }
    for (set<string>::iterator iter = st.begin(); iter != st.end(); iter++) {
        string temp = *iter;
        transform(temp.begin(), temp.end(), temp.begin(), ::tolower);
        sort(temp.begin(), temp.end());
        if (mp[temp] == 1) {
            cout << *iter << endl;
        }
    }
    return 0;
}
相关推荐
序属秋秋秋3 天前
C语言基础之【指针】(下)
c语言·笔记·学习·字符串·指针
Tisfy4 天前
LeetCode 0132.分割回文串 II:动态规划
leetcode·动态规划·字符串·题解·回文
Pandaconda6 天前
【新人系列】Golang 入门(二):基本数据类型
开发语言·笔记·后端·golang·go·字符串·数据类型
利刃大大11 天前
【字符串】最长公共前缀 && 最长回文子串
字符串·回文串
局外人_Jia12 天前
【C# 变量字符串还原转义字符】
linux·数据库·windows·正则表达式·c#·字符串·indexof
Sun_Weiss21 天前
从字符串中匹配多个关键词,优先匹配更长的关键词
python·正则表达式·字符串
Tisfy1 个月前
LeetCode 0541.反转字符串 II:模拟
算法·leetcode·字符串·题解
一直学习永不止步1 个月前
LeetCode题练习与总结:标签验证器--591
java·数据结构·算法·leetcode·职场和发展·字符串·
是基德吖1 个月前
【JavaSE】String类常用字符串方法总结
java·开发语言·字符串·string·方法
玉蜉蝣1 个月前
PAT甲级-1022 Digital Libiary
c++·字符串·模拟·pat甲