找第一个只出现一次的字符
Posted expedition
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找第一个只出现一次的字符相关的知识,希望对你有一定的参考价值。
方法一:
#include<stdio.h> #include<string.h> char a[100005]; int main() int f = 0; scanf("%s" , a); int ll = strlen(a); for(int i = 0;i < ll;i++) int x = 0; if(a[i] == ‘*‘) continue; for(int j = i+1;j < ll;j++) if(a[j] == ‘*‘) continue; if(a[i] == a[j]) x= 1; a[j] = ‘*‘; continue; if(x == 0) printf("%c",a[i]); f = 1; break; if(f == 0) printf("no"); return 0;
两个方向优化时间:
- strlen() 一次性算出来,不要在循环中多次计算
- 从前往后遍历时,如果a[i ]== a[j],可以令a[j ] = ‘*‘ ,特殊字符作为标志,这样,如果后面的循环中遇到 a[i] = ‘*‘ 【外层循环】 和 a[j] = ‘*‘ 【内层循环】 的情况,完全可以直接跳过该轮循环,优化时间
方法二:
#include<stdio.h> #include<string.h> int a[26]; char b[100005]; int main() memset(a,0,sizeof(a)); char c; int i = 0; int f =0; scanf("%s",b); int bl = strlen(b); for(int i =0;i < bl;i++) int x = b[i] - 97; a[x] = a[x] + 1; for(int i =0; i < bl;i++) int x = b[i] - 97; if(a[x] == 1) printf("%c",b[i]); f = 1; break; if(f == 0) printf("no"); return 0;
两个方向优化时间:
- strlen() 一次性计算出来,不要放到循环中多次计算
- 利用计时器【一般是int 数组】,存入26个0,表示a-z 每个字符出现的次数,然后从前往后遍历字符串,判定每个字符在计时器对应的位置的数值【即出现了几次】,如果遇到为1的情况,直接输出该字符,break结束。如果没有,则输出no
以上是关于找第一个只出现一次的字符的主要内容,如果未能解决你的问题,请参考以下文章