33. 判斷字符是否唯?(easy)
- 題?描述:
- 解法(位圖的思想):
- C++ 算法代碼:
- Java 算法代碼:
題?鏈接:?試題 01.01. 判定字符是否唯?
題?描述:
實現?個算法,確定?個字符串 s 的所有字符是否全都不同。
?例 1:
輸?: s = “leetcode”
輸出: false
?例 2:
輸?: s = “abc”
輸出: true
限制:
0 <= len(s) <= 100
s[i]僅包含?寫字?
如果你不使?額外的數據結構,會很加分。
解法(位圖的思想):
算法思路:
利?「位圖」的思想,每?個「?特位」代表?個「字符,?個 int 類型的變量的 32 位?夠表?所有的?寫字?。?特位??如果是 0 ,表?這個字符沒有出現過。?特位??的值是 1 ,表?該字符出現過。
那么我們就可以??個「整數」來充當「哈希表」。
C++ 算法代碼:
class Solution{
public:bool isUnique(string astr){// 利?鴿巢原理來做的優化if(astr.size() > 26) return false; int bitMap = 0;for(auto ch : astr){int i = ch - 'a';// 先判斷字符是否已經出現過if(((bitMap >> i) & 1) == 1) return false;// 把當前字符加?到位圖中bitMap |= 1 << i;}return true;}
}
Java 算法代碼:
class Solution {public boolean isUnique(String astr) {// 利?鴿巢原理來做優化if(astr.length() > 26) return false;int bitMap = 0;for(int i = 0; i < astr.length(); i++){int x = astr.charAt(i) - 'a';// 先判斷字符是否在位圖中if(((bitMap >> x) & 1) == 1) return false;// 把當前字符加?到位圖中bitMap |= 1 << x;}return true;}
}