1. 程式人生 > 其它 >01.01. 判定字元是否唯一

01.01. 判定字元是否唯一

  可以說這道簡單的面試題讓我學到了太多太多的東西了。

  首先這道題是這樣的:

  

  那麼這道看起來容易的“面試題”要考察什麼知識點呢?

  我第一時刻想到的是,排序+比較。比較確信自己的思路應該是對的。

   易如反掌!通過了。

  當然想到還可以用元組,但是沒想到這個題還有很多其他的東西。例如有人想到用位運算的方法來解決這個題,那麼位運算的時間複雜度可以達到On,那真的是相當的強了。

  位運算的思路非常清晰,26個字母,用每個字母和字母a做差,得到一個插值n,那麼每個字母就變成1<<n,這樣如果沒有相同的字母在,那麼無論你怎麼進行&運算都是0,例如b是01,c是10,&運算後是00.每次位運算判斷沒有字元相同的時候,我們用|運算來把當前結果加在一起,例如b和c加在一起就是11,下次出現10或者01的時候你做&運算就不會是0了,那就說明出現了重複的字元。

  

  看起來似乎更強了,但是問題也出現了。這樣做合理嗎?

  

  顯然你需要先問清楚輸入的內容字元在什麼範圍內,如果字元的範圍不侷限於26個字母,那麼你需要大於26位的整型大小。也就是說,32位的int可能裝不下這個數字。可是在python當中,數字是沒有最大值限制的,所以這樣做完全可以。