AcWing 1557. 说话方式
原题链接
简单
作者:
Wegoon
,
2021-09-06 16:13:00
,
所有人可见
,
阅读 288
知识点:模拟、字符串处理、哈希表
我的写法
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
int ans;
string s, res, ss;
unordered_map<string, int> m;
int main() {
getline(cin, s);
for (int i = 0; s[i]; i ++ ) if(s[i] >= 'A' && s[i] <= 'Z') s[i] += 32;
for (int i = 0; s[i]; i ++ ) {
if((s[i] >='a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9')) ss += s[i];
else if(ss != "") {
m[ss] ++;
if(m[ss] > ans || (m[ss] == ans && ss < res)) {
ans = m[ss];
res = ss;
}
ss = "";
}
}
if(ss != "") {
m[ss] ++;
if(m[ss] > ans || (m[ss] == ans && ss < res)) ans = m[ss], res = ss;
}
cout << res << ' ' << ans << endl;
return 0;
}
y总的写法
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
int ans = -1;
string s, res;
unordered_map<string, int> m;
bool check(char c) {
if(c >= 'A' && c <= 'Z') return true;
if(c >= 'a' && c <= 'z') return true;
if(c >= '0' && c <= '9') return true;
return false;
}
char to_lower(char c) {
if(c >= 'A' && c <= 'Z') return c + 32;
return c;
}
int main() {
getline(cin, s);
for (int i = 0; s[i]; i ++ ) {
if(check(s[i])) {
string ss;
int j = i;
while(s[j] && check(s[j])) ss += to_lower(s[j ++ ]);
m[ss] ++ ;
i = j;
}
}
for (auto x: m) {
if(x.second > ans || (x.second == ans && x.first < res)) {
ans = x.second;
res = x.first;
}
}
cout << res << ' ' << ans << endl;
return 0;
}