說實話,昨天UC的筆試題基本全是基礎,可是太基礎,直接致使不少都不能肯定了。看來無論找工做仍是找實習,必定要複習到位。好在我也一直是抱着打醬油的味道,實習與否不是特別在乎,不然真心要鄙視死本身啦。html
好的,言歸正傳,題目是一道經典的題目:在一個字符串中找到第一個只出現一次的字符。要求算法
一、必須用C/C++編寫代碼。spa
二、不能使用嵌套的for/while循環。code
看到這道題時,我坑爹的當作不能使用for/while循環了。我當時想的是,要遍歷字符串不能使用for/while,除非遞歸和使用goto語句,不然這幾乎是不可能的(若是能夠,請點明)。以爲題目應該不會這麼變態吧,遲遲不肯動筆,後來知道人家說的是嵌套好很差。好的,思路出來了(後來才知道網上一堆這樣的題目)。htm
一、暴力求解,複雜度爲O(n*n).必然會使用到雙循環。否決!blog
二、排序解決,能夠。複雜度也下降,各類排序算法見本博博文。各類內部排序算法排序
三、哈希表的方式,不知道爲何,我對哈希表的方式情有獨鍾,不少算法個人第一反應都是哈希。O(∩_∩)O哈哈~。昨天的算法代碼以下:遞歸
四、固然,還有第四種解決方式,用二進制的方式,用兩個位表示一個字符,掃描。感受和哈希表的方式差很少。字符串
1 int HT[256]={0}; 2 char getChar(char* str){ 3 assert(str!=NULL); 4 for (int i=0;i<strlen(str);i++) 5 HT[(int)str[i]]++; 6 for(int i=0;i<strlen(str);i++){ 7 if (HT[(int)str[i]]==1) 8 return str[i]; 9 } 10 return NULL; 11 }
看到博文的各路大仙,除了以上四種方式,還有其餘什麼求解方式,求指點。get
參考文獻:真心無
版權全部,歡迎轉載,可是轉載請註明出處:瀟一