面试题-------编程题---找到字符串中第一个只出现一次的那个字符
程序员文章站
2024-03-15 17:02:54
...
找到字符串中第一个只出现一次的那个字符
题目描述:
输入描述:
输入一个非空字符串
输出描述:
输出第一个只出现一次的字符,如果不存在输出-1
示例1
输入
asdfasdfo
输出
o
思路:
1:我们首先定义一个哈希表,哈希表的key值是字符,而值val则是该字符出现的次数;
2:然后我们需要对该字符串进行两次扫面,第一次是从头进行扫描,每次扫描到一个字符,就在哈希表的对应的位置将次数加1,然后进行第二次扫描,每次扫描到一个字符,就能从哈希表中得到该字符出现的次数,然后就能求得只出现一次的字符。
注:getline函数的作用,请参考网址:http://www.cplusplus.com/reference/string/string/getline/
cin函数的作用:
cin>>a;键盘读入数据赋值给a;
cin:C++编程语言互换流中的标准输入流,需要iostream.h支持,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。
具体作用请参考网址:http://www.cplusplus.com/reference/iostream/cin/
下面是我在牛客网oj环境下编译通过所有测试的代码:
这个是我用哈希表写出来的代码:
#include<iostream>
#include<string>
using namespace std;
const int tableSize = 256;
int hasTable[tableSize];
int main(){
string s;
while(getline(cin,s)){
bool flag = false;
for(int i=0;i<tableSize;++i) hasTable[i]=0;
for(int i=0;i<s.size();++i) hasTable[s[i]]++;
for(int i=0;flag!=true && i<s.size();++i){
if(hasTable[s[i]] == 1){
cout<<s[i]<<endl;
flag = true;
break;
}
}
if(flag==false)//如果没有找到
cout<<"-1"<<endl;
}
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while(getline(cin,str))//作用是从istream中读取至多n个字符保存在s对应的数组中
{
int a[128]={0};//保存出现次数
bool flag=false;//判断是否找到
for(int i=0;i<str.size();++i)
++a[str[i]];
for(int i=0;i<str.size();++i)
if(a[str[i]]==1)//判断是否是第一个只出现一次的字符
{
cout<<str[i]<<endl;
flag=true;
break;//注意要break;
}
if(flag==false)//如果没有找到
cout<<"-1"<<endl;
}
return 0;
}
测试用例
下一篇: 如何删除一个字符串中的一个字符