日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查找字符串中首个非重复字符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:編寫一個高效函數,找到字符串中首個非重復字符。如"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可以優化空間復雜度。

?

?

轉載于:https://www.cnblogs.com/ivorfeng/archive/2013/03/29/2988307.html

總結

以上是生活随笔為你收集整理的查找字符串中首个非重复字符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。