题目来源于力扣–https://leetcode-cn.com/
可以用一个临时的数组来对出现的字符进行计数,题目要求,字符全都是小写的,所以我们可以给定一个26大小的数组来存放每个字符出现的次数,最后循环判断哪个地方的字符为1,就是第一个出现的唯一字符,否则返回-1。
main函数代码
#include<stdio.h>
int firstUniqChar(char * s);
int main(){
char s[]="leetcode";
int num = firstUniqChar(s);
printf("%d",num);
return 0;
}
计数代码
int firstUniqChar(char * s){
int count[26]={};
int i = 0;
// 数组不为空,就继续进行
while(s[i]){
// 这个地方是,26个小写字母从a开始,字母进行a-a=0,b-a=1,,,,,,,,依次类推,z-a=25,
// 计算每个字符出现的次数,存储下来。
count[s[i]-'a']++;
i++;
}
// 遍历数组,因为字符是乱序的,要保证第一个唯一,所以不能从0开始遍历count数组,要通过
// 原字符出现的顺序进行遍历。
for(int j=0;j<i;j++){
if(count[s[j]-'a']==1){
return j;
}
}
return -1;
}
该代码实现了一个算法,通过创建一个计数数组来统计输入字符串中每个小写字母出现的次数。遍历字符串,用'a'到'z'之间的偏移量更新计数数组。之后,再次遍历字符串,找到第一个计数为1的字符位置并返回,否则返回-1。这个方法有效地解决了找出字符串中第一个唯一字符的问题。
595

被折叠的 条评论
为什么被折叠?



