NOI--ch0107--02--找第一个只出现一次的字符
题目链接→NOI--ch0107--02 找第一个只出现一次的字符
找第一个只出现一次的字符
Accept: 0 Submit: 0
Time Limit: 6000/3000 MS (Java/Others) Memory Limit : 65536/65536 K (Java/Others)
Problem Description
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
Input
一个字符串,长度小于100000。
Output
输出第一个仅出现一次的字符,若没有则输出no。
Sample Input
abcabd
Sample Output
c
Problem Idea
解题思路:
【题意】
题意很明显,关键是如何统计字符在一个串中出现的次数。
【类型】
字符串
【分析】
字符串的输入:采用char数组,因为没有空格可用cin直接读入。
方法一可以开辟一个和char数组同样大小的数组,即一个哈希表,通过一次循环遍历字符串,将串中每个字符出现的次数记录下来。
另一种方法为动态数组,比较省内存,声明时不需指定数组大小,初始化时根据输入字符串的大小new相应空间。
记录一个字符串中各个字符出现的次数
for(int i=0;i<len;i++){
x=s[i];
p[x]++;
}
【时间复杂度&&优化】
O(n)
Source Code
5ms
6ms
#include <iostream>
#include <cstring>
using namespace std;
char s[100001];
int p[100001];
int x;
int main() {
cin>>s;
int len=strlen(s);
for(int i=0;i<len;i++){
x=s[i];
p[x]++;
}
for(int i=0;i<len;i++){
x=s[i];
if(p[x]==1){
cout<<s[i]<<endl;
return 0;
}
}
cout<<"no"<<endl;
return 0;
}