题目描述
回家后,小 X 望着自己打瞌睡时写的英语笔记陷入了迷茫。由于太困了,他会时不时地把一个字母多写几次:比如可能把“she”写成“shhe”,也可能写成“ssshee”。
但他依稀记得这堂课只讲了一个重点单词。为了找到这个单词,他想先把每个单词中连续重复的字母压缩起来:把“coool”压缩为“col”,把“aabbaa”压缩为“aba”。接下来找到压缩后出现次数最多的单词,这样就能找到重点单词了。
由于工作量太大,小 X 希望你帮助他找到重点单词。他向你保证压缩后的单词出现次数最多的一定唯一。输入
第一行一个整数 n 表示笔记上共写了 n 个单词。
接下来 n 行,每行一个字符串,表示一个单词。输出
输出数据只有一行,包含一个字符串,表示压缩后出现次数最多的单词。
样例输入 Copy
3 qaaqqq qwwwwq qqqqaq样例输出 Copy
qaq提示
样例解释
“qaaqqq”压缩成“qaq”
“qwwwwq”压缩成“qwq”
“qqqqaq”压缩成“qaq” “qaq”出现了两次,“qwq”出现了一次所以“qaq”出现次数最多
数据范围
本题共有 10 个测试点,每个测试点 10 分
对于全部数据:单词长度<=50
对于测试点 1 :n=1,单词长度为 1
对于测试点 2-3 :n<=10000,单词长度为 1
对于测试点 4-6 :n=1
对于测试点 7-8 :n<=10
对于测试点 9-10:n<=10000
#include <bits/stdc++.h>
using namespace std;
map<string, int> cnt;
int main()
{
int n;
cin >> n;
getchar();
vector<string> s;
int mx = -1;
string ans = "";
while (n--)
{
string word;
cin >> word;
string temp = "";
temp += word[0];
int L = word.size();
int i;
for (i = 1; i < L; i++)
{
if (word[i] != word[i - 1])
{
temp += word[i];
}
}
cnt[temp]++;
if (cnt[temp] > mx)
{
mx = cnt[temp];
ans = temp;
}
}
cout << ans << '\n';
return 0;
}