AcWing 772. 只出现一次的字符--2种方法
原题链接
中等
作者:
bruce
,
2020-11-08 21:38:23
,
所有人可见
,
阅读 4163
#include<iostream>
using namespace std;
int main()
{
string s;
cin>>s;
int index=0;
int x[100000] = {0};
for(auto i: s)
x[i]++;
for(auto i:s)
{
if(x[i]==1)
{
cout<<i<<endl;
return 0;
}
}
cout<<"no"<<endl;
}
/**
* 参考链接https://www.acwing.com/solution/content/10396/
* 从前往后和从后往前都是同一个位置
*/
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string A;
while(getline(cin,A))
{
for(int i=0;i<A.size();i++){
if(A.find(A[i])==A.rfind(A[i])){
cout<<A[i]<<endl;
return 0;
}
}
}
cout<<"no"<<endl;
return 0;
}
大佬可以解释下while(getline(cin,A))吗
就是输入A的意思
这段代码的目的是从输入的字符串
s
中找到第一个只出现一次的字符,并输出该字符。如果字符串中没有只出现一次的字符,则输出 “no”。解释代码的主要部分:
int x[100000] = {0};
:创建一个数组x
,用于记录每个字符在字符串中出现的次数。数组大小为 100000,这是一种预先假设字符串中字符的范围,但实际应用中应该根据具体情况进行调整。for(auto i: s) x[i]++;
:遍历字符串s
中的每个字符,将字符的出现次数记录在数组x
中。for(auto i: s)
:再次遍历字符串s
中的每个字符。if(x[i]==1)
:检查当前字符在数组x
中的出现次数是否为 1。cout << i << endl;
:如果找到只出现一次的字符,则输出该字符并结束程序。cout << "no" << endl;
:如果字符串中没有只出现一次的字符,则输出 “no”。这个程序的主要思路是通过数组
x
记录每个字符的出现次数,然后再次遍历字符串找到第一个出现次数为 1 的字符。如果找到,就输出该字符,否则输出 “no”。第一种方法数组不用开那么大吧?开到z的阿斯克码大小就行了吧
输入格式
共一行,包含一个由小写字母构成的字符串。
数据保证字符串的长度不超过 100000
一共有128种字符吧,不一定是’z’吧;
这跟字符串长度没关系,跟字符种类有关系
完了,新手表示完全看不懂
6
第一个方法最好先把x数组初始化全为0,不然有的编译器初始值会是随机数
好棒
我觉得while是由问题的
佬,既然都return 0了,那s是不是就可以不用了
是的,s这里不用,已修改,多谢提醒
这些变量不需要初始化数值吗?
棒
可惜了,这么对新手友好的厉害文章没人看,大佬加油!
哈哈哈哈,一起加油哈