Codeup 6168 問題 A: Speech Patterns (25)

題目鏈接http://codeup.cn/problem.php?cid=100000599&pid=0

題目描述
People often have a preference among synonyms of the same word. For example, some may prefer “the police”, while others may prefer “the cops”. Analyzing such patterns can help to narrow down a speaker’s identity, which is useful when validating, for example, whether it’s still the same person behind an online avatar.

Now given a paragraph of text sampled from someone’s speech, can you find the person’s most commonly used word?

輸入
Each input file contains one test case. For each case, there is one line of text no more than 1048576 characters in length, terminated by a carriage return ‘\n’. The input contains at least one alphanumerical character, i.e., one character from the set [0-9 A-Z a-z].

輸出
For each test case, print in one line the most commonly occurring word in the input text, followed by a space and the number of times it has occurred in the input. If there are more than one such words, print the lexicographically smallest one. The word should be printed in all lower case. Here a “word” is defined as a continuous sequence of alphanumerical characters separated by non-alphanumerical characters or the line beginning/end.

Note that words are case insensitive.

樣例輸入
Can1: “Can a can can a can? It can!”

樣例輸出
can 5

代碼

#include <iostream>
#include <string> 
#include <map>

using namespace std;

bool check(char c) {				//檢查字符是否合法
	if(c >= '0' && c <= '9')
		return true;
	if(c >= 'a' && c <= 'z')
		return true;
	if(c >= 'A' && c <= 'Z')
		return true;
	return false;
}

int main() {
	map<string, int> count;
	string str;
	getline(cin, str);
	unsigned int i = 0;
	while(i < str.length()) {
		string word;
		while(i < str.length() && check(str[i]) == true) { 	//將單詞提取到word中
			if(str[i] >= 'A' && str[i] <= 'Z')				//不區分大小寫,把大寫統一轉化成小寫
				str[i] += 32;
			word += str[i];
			i++;
		}
	
		if(word != "") {						 //若單詞不爲空
			if(count.find(word) == count.end())  //統計此單詞出現的個數
				count[word] = 1;
			else
				count[word]++;
		}
		while(i < str.length() && check(str[i]) == false)//跳過非法的字符
			i++;
	}
	string ans;		//存放出現最多的單詞
	int max = 0;	//存放最多單詞的次數
	for(map<string, int>::iterator it = count.begin(); it != count.end(); it++) //依次尋找
		if(it->second > max) {
			max = it->second;
			ans = it->first;
		}
	cout<<ans<<" "<<max<<endl;
	return 0;
}
發佈了186 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章