题目描述
给你一个只包含小写字母的字符串。
请你判断是否存在只在字符串中出现过一次的字符。
如果存在,则输出满足条件的字符中位置最靠前的那个。
如果没有,输出”no”。
输入格式
共一行,包含一个由小写字母构成的字符串。
数据保证字符串的长度不超过100000。
输出格式
输出满足条件的第一个字符。
如果没有,则输出”no”。
样例
输入样例:
abceabcd
输出样例:
e
思路
这道题的关键在于如何把字母出现的次数记下来,这里用到一个数组s[300],来记录各个字母出现的次数;
然后调用
for(int i=0;i<str.length();i)
{
s[str[i];
},用数组s存储各个字母出现的次数。
再次调用for循环遍历各个字符,
if(s[str[i]]==1)
{
p=str[i];
break;
}如果遇到第一个字符出现次数为1.则把该字符赋值给c,break退出for循环。
C++ 代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
string str;
getline(cin,str);
int s[300]={0};
for(int i=0;i<str.length();i++)
{
s[str[i]]++;//统计各个字符出现的次数
}
char p=-1;
for(int i=0;i<str.length();i++)//如果遇到第一个字符出现次数为1.则把该字符赋值给c,break退出for循环。
{
if(s[str[i]]==1)
{
p=str[i];
break;
}
}
if(p==-1) puts("no");
else printf("%c",p);
return 0;
}
666
应该做一个字符类型转换 把字符串类型转换为整型吧
为什么开数组要开成300
习惯开成26…