解説
禁止文字に該当しない最大の出現回数である文字を返せば良い
-アルファベット以外の文字(!?.;など)を空白に変換する
-空白を区分字としてSplitする。(C++はSplitが無い。。。)
-文字は小文字に統一
-文字ごとに出現回数を記録する
-禁止文字に該当しない最大の出現回数である文字を返す
# include <algorithm>
# include <vector>
# include <random>
typedef long long ll;
# define rep(i,s,n)for(ll i=s;i<n;i++)
# define repe(i,s,n)for(ll i=s;i<=n;i++)
# include <map>
# include <iostream>
class Solution {
public:
map<string, int> mp;
string mostCommonWord(string p, vector<string>& b) {
string q;
rep(i, 0, p.size()) {
if (p[i] == '!' || p[i] == '?' || p[i] == '\'' || p[i] == ',' || p[i] == ';' || p[i] == '.') {
p[i] = ' ';
}
}
int s = 0;
string t;
rep(i, 0, p.size()) {
if (p[i] != ' ') {
if (p[i] >= 'A' && p[i] <= 'Z') {
//p[i] = (char)(p[i] + ('a' - 'A'));
p[i] = (char)(p[i] + ('a' - 'A'));
}
t += p[i];
}
else if(t != ""){
mp[t]++;
t = "";
}
}
vector<pair<int,string>> v;
for (map<string, int>::iterator it = mp.begin(); it != mp.end(); it++) {
v.push_back({ it->second, it->first });
}
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
for (auto k : v) {
bool isban = false;
for (auto ban : b) {
if (k.second == ban) {
isban = true;
}
}
if (!isban) {
return k.second;
}
}
return t;
}
};