题目:
给定一个字符串,输出第一次出现k次的字母。
示例:
输入:abbcdaabgb
3
输出:a
输入:aaabbb
3
输出:a
c++实现
第一种思路:
#include<iostream>
#include<string>
using namespace std;
int main(){
string str;
int k,state=0; //state为是否是第一次出现k次
char letter;
cin>>str>>k;
for(int i=0;i<str.length();i++){
int counts=0; //每次用一个新的字母作为对比的对象时,次数要重置为0
for(int j=0;j<str.length();j++){
if(str[i]==str[j]){
counts++;
}
if(counts==k&&j==(str.length()-1)){ //出现了k次,而且字符串已经遍历完了。
state++;
if(state==1){
letter=str[i];
}
}
}
}
cout<<letter<<endl;
return 0;
}
第二种思路:
使用map来实现
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
string str;
int k;
cin>>str>>k;
map<char,int> m; //建立一个键为字符,键值为此字符出现的次数
for (int i = 0; i < str.length(); i++)
{
if(m.count(str[i]) == 0){ //不存在str[i]字符,就插入此字符,并赋值键值为1即出现次数为1
m.insert(pair<char,int>(str[i], 1));
}else{
m.find(str[i])->second++; //存在就把键值加一
}
}
map<char, int>::iterator iter; //创建一个迭代器
iter = m.begin();
while(iter != m.end()) { //对map进行遍历
if(iter->second==k){ //当键值为k时,满足条件
cout<<iter->first;
break;
}
iter++;
}
return 0;
}
java实现
package CSDNTest;
import java.util.Scanner;
public class letterk {
public static void main(String[] args) {
String str;
int k,state=0; //state为是否是第一次出现k次
char letter=' ';
Scanner scanner = new Scanner(System.in);
System.out.println("输入字符串:");
str=scanner.next();
System.out.println("输入出现次数:");
k=scanner.nextInt();
for(int i=0;i<str.length();i++){
int counts=0; //每次用一个新的字母作为对比的对象时,次数要重置为0
for(int j=0;j<str.length();j++){
if(str.charAt(i)==str.charAt(j)){
counts++;
}
if(counts==k&&j==(str.length()-1)){ //出现了k次,而且字符串已经遍历完了。
state++;
if(state==1){
letter=str.charAt(i);
}
}
}
}
System.out.println("第一次出现"+k+"次的字母为:"+letter);
}
}
截图: