题目描述
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例:
s = "abaccdeff"
返回 "b"
s = ""
返回 " "
限制:
0 <= s 的长度 <= 50000
解题思路
遍历两次字符串,第一次记下每一个字符出现的次数,第二次遍历时,第一次出现次数为1的即为所求字符。
代码
char firstUniqChar(char* s){
if((s == NULL) || (strlen(s) == 0))
return ' ';
int hash_array[256] = {0};
char *p = s;
while((*p) != '\0')
{
hash_array[*p]++;
p++;
}
p = s;
while(*p != '\0')
{
if(hash_array[*p] == 1)
{
return *p;
}
p++;
}
return ' ';
}
测试代码及结果
#include<stdio.h>
#include<string.h>
char firstUniqChar(char *s);
int main(void)
{
// 功能测试
char str1[] = "abaccdeff"; // 字符串中存在只出现一次的字符
char res1 = firstUniqChar(str1);
printf("res1 = %c\n", res1);
char str2[] = "adaccdff"; // 字符串不存在只出现一次的字符
char res2 = firstUniqChar(str2);
printf("res2 = %c\n", res2);
char str3[] = "adcdf"; // 字符串中所有字符都只出现一次
char res3 = firstUniqChar(str3);
printf("res3 = %c\n", res3);
// 特殊输入测试
char *str4 = NULL;
char res4 = firstUniqChar(str4);
printf("res4 = %c\n", res4);
return 0;
}
执行结果
时间复杂度:O(n),空间复杂度:O(1)。