主要是要从输入中,区分出单词
class Solution {
public:
string normlize(string s){
string result="";
for (int i=0;i<s.size();i++){
if (s[i]>='a' && s[i]<='z'){
result += s[i];
}
if (s[i]>='A' && s[i]<='Z'){
result += s[i]-'A'+'a';
}
}
return result;
}
string mostCommonWord(string paragraph, vector<string>& banned) {
// gain all words
string temp = "";
vector<string> words;
for (int ii=0;ii<paragraph.size();ii++){
if (paragraph[ii]==' ' || paragraph[ii]=='!' || paragraph[ii]=='?' || paragraph[ii]==',' || paragraph[ii]==';' || paragraph[ii]=='.' || paragraph[ii]=='\''){
if (temp.size()!=0){
words.push_back(normlize(temp));
}
temp = "";
}
else{
temp += paragraph[ii];
}
}
if (temp.size()!=0){
words.push_back(normlize(temp));
}
// count words
map<string, int> count;
for(int i=0;i<words.size();i++){
if (count.find(words[i])!=count.end()){
count[words[i]] ++;
}
else{
count[words[i]] = 1;
}
}
// return the max, not in banned
int max_num = 0;
string max_str = "";
for (map<string, int>::iterator it=count.begin();it!=count.end();++it){
cout << it->first << endl;
cout << it->second << endl;
if (it->second > max_num ){
int nRet = std::count(banned.begin(), banned.end(), it->first);
if (nRet == 0){ // not exist
max_str = it->first;
max_num = it->second;
}
}
}
return max_str;
}
};