题目描述
给你一个只包含小写字母的字符串。
请你判断是否存在只在字符串中出现过一次的字符。
如果存在,则输出满足条件的字符中位置最靠前的那个。
如果没有,输出 no。
输入格式
共一行,包含一个由小写字母构成的字符串。
数据保证字符串的长度不超过 100000。
输出格式
输出满足条件的第一个字符。
如果没有,则输出 no。
输入样例:
abceabcd
输出样例:
e
难度:中等
时/空限制:1s / 64MB
总通过数:2994
总尝试数:7672
来源:语法题
算法标签
//这个题解完全从别的师傅哪里转载,只是为了以后我好找。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
string str;
int s = 0;
while (getline(cin,str))//输入
{
for(int i=0 ; i < str.size() ; i ++)//遍历
{
if(str.find(str[i]) == str.rfind(str[i])) //判断当前字符是否是否出现一次,是:输出并改变s ,否:无动作;
{
s = 1;
cout << str[i]<<endl;
break;
}
}
}//find == rfind 的值一致,则说明只出现过一次,因为字符遍历判断从左开始进行,则可以有效输出第一个。
if(s==0)// 输出no这一情况;
{
cout << "no" << endl;
}
return 0;
}
作者:想想y总怎么做(请支持原作者)
来源:AcWing
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
string Str;
int a[300] = {0};
getline(cin,Str);
int k = Str.size();
for(int i=0;i<k;i++)
{
a[Str[i]]++;
} //从这里往上的代码效果是统计字符串中的各个字符的个数,并且储存在数组a中,对应的下标等于此字母的ASCII值;
int l = 1;//变量l的作用是携带条件值控制“no”的输出。
for(int i=0;i<k;i++)//此 for 循环 演示了如何调用储存在数组a中的数据。
{
if(a[Str[i]] == 1){cout << Str[i]; l = 0 ; break;}
}
if(l == 1) cout <<"no";
return 0;
}
这个也是从别人哪里看的。
出处:作者: Cubby , 2020-01-03 13:57:07 , 阅读 899