您的位置:首页 > 其它

【字符串】NOI--ch0107--02--找第一个只出现一次的字符(指针数组,有技巧)

2018-02-09 13:45 351 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: