总时间限制: 1000ms 内存限制:65536kB
描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd
样例输出
c
思路:找第一个出现一次的字符->统计所有字符,每个出现的次数->遍历一遍,找出第一个次数为1的字符。
程序:
#includeusing namespace std; #define Max 100000 typedef struct letterCount{ char letter;//字符 int count = 0;//出现的次数 }letterCount; int main() { char s[Max]; //输入数据 letterCount lc[Max];//把字符放在结构体中 int lc_len = 0;//统计数组的长度 cin.get(s,100000); for(int i = 0;i<100000;i++){//遍历输入的字符 if(s[i]==' '){ break; }else{ int flag = 0;//标记是否之前统计过;0:没有,1:统计过 for(int j = 0;j 结果:通过。
分析:代码可以优化,而且效率为O(n^2)
优化(百度)后:只用一个数组,效率O(n^2)
程序:
#include#include using namespace std; #define Max 100000 int main() { int length; char s[Max]; cin.get(s,100000); length = strlen(s); int flag = 0; for(int i = 0;i 再次优化(百度)后:通过字符之差,来锁定该字符与其个数。效率O(n)
程序:
#include#include using namespace std; #define Max 100000 void init(int count[],int len){ for(int i = 0;i


