2015-07-10 14 views
-5

嗨,我用C++來解決字符串字符唯一性的問題。我發現這個解決方案的地方,工作正常。但我不明白它是如何工作的。請有人解釋一下。有人可以解釋這個程序來檢查字符串中的唯一字符C++

bool isUnique(string s){ 
    int check = 0; 
    for(int i=0;i<s.length();++i){ 
     if(s[i] != ' '){ 
      int val = s[i]-'a'; 
      if((check & (1 << val)) > 0) return false; 
      check = check | (1 << val); 
     } 
    } 
    return true; 
} 

如果字符串沒有重複字符(不包括空格),則返回true否則返回false。

+2

你從哪裏得到的代碼沒有解釋任何東西?你知道你也可以用調試器遍歷代碼,看看發生了什麼。 – NathanOliver

+0

你對唯一性的定義是什麼? – Bathsheba

+1

我投票結束這個問題作爲題外話,因爲沒有。 –

回答

4

它使用int就好像它是一個位圖。對於字符唯一性測試,位圖當然是比地圖更好的數據結構。一個int是一個粗糙和有問題的(在這種情況下)替代一個位圖。

假設一個int有32位。這些位在此代碼中分配爲以小寫字母'a'開頭的前32個字符。因此,大寫字母和大多數特殊字符都沒有位位置,即使它們不是唯一的,也會被此代碼視爲唯一。

如果您只關心小寫字母的唯一性,並且您確定代碼僅用於int中至少有32位的體系結構,那麼這是一個體面的方法。否則,當你想要一個位數組時,使用一些實際的位數組。

+0

對於特殊字符,'1 << too_big_number'就是UB。 – Jarod42

相關問題