在字符串中找出第一个只出现一次的字符,如输入“abaccdeff”,则输出‘b’,要求时间复杂度为0(n)
废话不多说,直接看代码;
#include<stdio.h>
void First(char *str,int k)
{
int i = 0;
char string[256] = { 0 };
for (i = 0; i < k; i++)
{
string[*(str + i)]++;
}
for (i = 0; i < k; i++)
{
if (string[*(str + i)] == 1)
{
printf("%c\n", *(str + i));
break;
}
}
}
int main()
{
char *str = "abaccdeff";
First(str,strlen(str));
system("pause");
return 0;
}
解释:因为要求时间复杂度为O(n),所以循环不可以进行嵌套;那么怎样进行一次循环就可以解决问题呢?答案就是,因为字符为8bit类型的,所以只有256个;这样我们就可以定义一个大小为256的数组,并初始化为0;如此一来只需要给新建立数组的对应下标出加一即可;