【金山面试题】三次字符
描述
给定一个英文字符串(包括空格和换行),请找出该字符串中首次出现三次的英文字母(字符需区分大小写) 。如果不存在则输出-1;
输入描述:
输入一个字符串,可包含数字、字母,长度不超过106 个字符
输出描述:
输出第一个出现三次的英文字母,不存在则输出“-1”
输入例子1:
i love Kingsoft Office
输出例子1:
f
输入例子2:
I love KingsoFt Office
输出例子2:
-1
思路
这个题一看就知道是用的hash,但就是死活通不过。
后来注意到ACM模式+字符串的长度最大可达
1
0
6
10^6
106,这才反应过来应该使用eof来判断输出的结束。同时还需注意,空格是要略过的。
代码
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){
char ch;
map<char,int> hashmap;
while(ch=cin.get()){
//小心处理
if(cin.eof()) break;
else{
if(isalpha(ch)){
//传统的哈希做法
hashmap[ch]++;
if(hashmap[ch]==3){
cout<<ch<<endl;
return 0;
}
}
}
}
cout<<"-1"<<endl;
return 0;
}