Ananagram
Ananagrams
題目鏈接:Ananagrams
題目概述:題目描述的是一種字謎,即不區分大小寫的多個字母,可以按不同的順序組合,都被視為同一個單詞。比如“POST”,“pstO”,“Otsp”…都被視為同一個單詞。題目給了一系列單詞,求出值出現一次的單詞并數次。比如如果存在 “POST”和“pstO”則視為出現兩次。
Input:
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 #Output:輸出按字典順序(不區分大小寫)排列。
Disk NotE derail drIed eye ladder soon解題思路:
主要利用map數據結構的 key 唯一性來實現。將每個字符串全部轉為小寫,在用sort進行排序。這樣固定字母的不同大小寫組合最終會被處理為同一個字符串。然后判斷map是否存在該 dict[key],若不存在,則直接保存 dict[key]=原字符串。若存在,則令 dict[key]=”#”。為了按字典序輸出,遍歷 dict 將 value 不等于 ‘#’ 的放入set,在遍歷輸出就OK了。
最終代碼:
#include <iostream> #include <string> #include <map> #include<algorithm> #include <set> using namespace std;int main() {map<string, string> dict;set<string> result;string key;string value;while(cin >> value && value!="#"){key = value;for(unsigned int i = 0; i < key.length(); i++){key[i] = tolower(key[i]);}sort(key.begin(), key.end());pair<map<string, string>::iterator, bool> ret;ret = dict.insert(pair<string, string>(key, value));if(ret.second == false){dict[key]="#";}}for(map<string,string>::iterator it = dict.begin(); it != dict.end(); it++){if(it->second != "#")result.insert(it->second);}for(set<string>::iterator iter = result.begin();iter != result.end();iter++)cout << *iter<<endl;return 0; }總結
- 上一篇: sda、sdb、sda1、sda2的意思
- 下一篇: 3D人物建模用哪个软件入门比较快?