例题:
大意:
给出很多单词,找出重排以后不会重复的单词,比较时不区分大小写;输出是要保留大小写,并按照字典序进行排列(所有大写在前面)。
知识点:
map是从键(key)到值(value)的映射,和数组差不多只不过能够用[“key”]来访问对应的值。
利用一个vector来储存原来的所有单词
标准化之后,更新map的值
然后遍历第一个vector,将满足条件的放入第二个vector
最后排序,然后输出
代码:
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> words;
vector<string> ans;
map<string,int> cnt;
string repr(const string& x){
string str = x;
for(int i = 0;i<str.length();i++){
str[i] = tolower(str[i]);
}
sort(str.begin(),str.end());
return str;
}
int main(){
string s1;
while(cin >> s1){
if(s1[0] == '#') break;
words.push_back(s1);
string s2 = repr(s1);
if(!cnt.count(s2)) cnt[s2] = 0; // 如果不存在,就创建
cnt[s2] ++; // 对应的值不管原先存不存在,都要+1
}
for(int i = 0;i<words.size();i++){
if(cnt[repr(words[i])]==1){ // 恰好等于一,证明只出现了一次,那么对应的
ans.push_back(words[i]);
}
}
sort(ans.begin(),ans.end());
for(int i = 0;i<ans.size();i++){
cout << ans[i] << endl;
}
}
----1/31 今天累了,明天八点起来把最后的栈和队列看了,然后看dp。