查找字符串中首个非重复字符

题目描述:编写一个高效函数,找到字符串中首个非重复字符。如"total"首个非重复字符为'o',"teeter"为'r'。(时间复杂度最好为O(N))

思路:字符串仅限于使用ASCII码,可以用一数组来存放各个字符出现的次数,然后按字符串顺序找出首个次数为1的字符,并打印出来。

时间复杂度:遍历字符串O(N),找出首个次数为1 的字符最坏情况O(N),故总的时间复杂度O(N);

代码如下

 

View Code
 1 #include<stdio.h>
 2 //找字符串中首个非重复字符,如"total"首个非重复字符为'o',"teeter"为'r'。
 3 void firstNonRepeated(char *str)
 4 {
 5     if (NULL == str)
 6     {
 7         return;
 8     }
 9     int asc[256] = {0};
10     char *p = str;
11     while (*p != '\0')
12     {
13         asc[*p]++;
14         p++;
15     }
16 
17     p = str;
18     while (*p != '\0')
19     {
20         if (asc[*p] == 1)
21         {
22             printf("%c\n", *p);
23             break;
24         }
25         p++;
26 
27     }
28     
29 }
30 
31 int main()
32 {    
33     char str1[] ="total";
34     char str2[] ="teeter";
35     firstNonRepeated(str1);
36     firstNonRepeated(str2);
37     return 0;
38 }

 


还有别的方法使用hashtable,不过感觉比较麻烦,而且我不太会用。。。但是使用hashtable可以优化空间复杂度。

 

 

posted @ 2013-03-29 10:01  hust_枫  阅读(517)  评论(0编辑  收藏  举报