[CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符
?
1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structure?
?
這道題讓我們判斷一個字符串中是否有重復的字符,要求不用特殊的數據結構,這里應該是指哈希表之類的不讓用。像普通的整型數組應該還是能用的,這道題的小技巧就是用整型數組來代替哈希表,在之前Bitwise AND of Numbers Range 數字范圍位相與的解法二中也用到過這種方法。由于ASCII表里的基本表共有128個字符,也就是可以用鍵盤表示出來的,整個表共有256個字符,所以我們只要用一個大小為256的整型數組就可以包含所有的字符,我們遍歷輸入字符串,對每一個字符都存入到相應位置,并賦值1,如果遇到已經為1的,說明之前出現過該字符,返回false,如果遍歷完s,則返回true,代碼如下:
?
class Solution { public:bool isUniqueChar(string s) {if (s.size() > 128) return false;int m[256] = {0};for (int i = 0; i < s.size(); ++i) {if (m[s[i]] > 0) return false;m[s[i]] = 1;}return true;} };?
書上還給了另一種解法,是用位操作 Bit Manipulation,但是這種解法只有當輸入字符串是由小寫字母組成的才成立,因為小寫字母只有26個,不超過整型int的32位,對于每個字母,我們將對應位置設為1,然后看之前是否是1,是的話返回false,不是的話設為1。跟上面的方法核心是一樣的,只不過空間上省了很多,但是也對輸入做了更為嚴格的限制,代碼如下:
?
// Only works when s consists of lower-case letters a-z class Solution { public:bool isUniqueChar(string s) {int m = 0;for (int i = 0; i < s.size(); ++i) {int d = s[i] - 'a';if (m & (1 << d) > 0) return false;m |= (1 << d);}return true;} };?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的[CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到筷子断了是什么意思
- 下一篇: OAF_开发系列19_实现OAF对话框提