解题思路:
注意事项:
参考代码:
//题目描述
//给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。
//如果没有,输出no。
//输入格式
//一个字符串,长度小于100000。
//输出格式
//输出第一个仅出现一次的字符,若没有则输出no。
//样例输入
//abcabd
//样例输出
//c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch[1000000] = { 0 };
gets(ch);//输入ch
char letter[26] = { 0 };
int count[26] = { 0 };
char letteronce[26] = { 0 };
for (int i = 0; i < 25; i++)
{
letter[0] = 97;
letter[i + 1] = letter[i] + 1;
}//将数组初始化为a-z
int t = 0;
int n = 26;
int len = strlen(ch);
for (int i = 0; i < len; i++)//遍历输入的字符串
{
int s ;
for ( s = 0; s < 26; s++)
{
if (ch[i] == letter[s])
{
count[s]++;
break;
}//找到对应字母,并记录其次数
}
if (count[s] == 1)
letteronce[t++] = letter[s];//次数为1,将其记入可变字符串
if (count[s] == 2)
{
int m;
for (m = 0; m < 26; m++)
if (letteronce[m] == letter[s])
{
letteronce[m] = 0;
break;
}
n--;
}//次数为2时,将可变字符串中对应字母变为0,总次数减一
if (n == 0)
break;
}
if (n == 0)
printf("no");
else
{
for (int s = 0; s < 26; s++)
{
if (letteronce[s] != 0)
{
printf("%c", letteronce[s]);
break;
}
if (s == 25)
printf("no");
}
}
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复