题目传送门
方法一、哈希表
class Solution {public boolean isUnique(String astr) {if(astr == null){return false;}Map<Character,Integer> map = new HashMap<>();for(int i = 0; i < astr.length(); i++){if(map.containsKey(astr.charAt(i))){return false;}map.put(astr.charAt(i),i);}return true;}
}
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(n)
方法二:哈希表(数组)
class Solution {public boolean isUnique(String astr) {if(astr == null){return false;}int[] hash = new int[26];for(int i = 0; i < astr.length(); i++){if(hash[astr.charAt(i) - 'a'] == 1){return false;}hash[astr.charAt(i) - 'a']++;}return true;}
}
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)
方法三:位图
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;}
}