一、題目解析
1、s[i]僅包含小寫字母
2、字符串的長度為[0,100]
二、算法原理
解法1:哈希表
用哈希表記錄s[i]的字符,如果有重復的,則返回false
優化1:由于s[i]中只有小寫字母,所以可以創建一個int hash[26]的數組,0代表字符a
解法2/優化2:位圖
一個int有32個比特位,我們可以用一個比特位代表一個小寫字母,‘a’用0位比特位表示,0表示字符未存在,1表示字符存在
位運算公式:
?
三、代碼示例
class Solution {
public:bool isUnique(string astr){if(astr.size() > 26) return false;int n = 0;for(auto& e : astr){if(((n>>(e-'a')) & 1) == 1)return false;if(((n>>(e-'a')) & 1) == 0)n |= (1<<(e-'a'));}return true;}
};
?
?