题目:
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = “leetcode”
输出: false
示例 2:
输入: s = “abc”
输出: true
限制:
0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分
思路一:
使用哈希表这个结构,已经使用了额外的数据结构了
class Solution {
public boolean isUnique(String astr) {
HashSet<Character> set = new HashSet<>();
for (char c : astr.toCharArray()) {
if (!set.add(c)) {
return false;
}
}
return true;
}
}
或者通过哈希表的contains来进行判断
class Solution {
public boolean isUnique(String astr) {
HashSet<Character> set = new HashSet<>();
for (char c : astr.toCharArray()) {
if (set.contains(c)) {
return false;
}
set.add(c);
}
return true;
}
}
或者通过另外一个函数
class Solution {
public boolean isUnique(String astr) {
HashSet<Character> set = new HashSet<>();
for(int i=0;i<astr.length();i++) {
if (set.contains(astr.charAt(i))) {
return false;
}
set.add(astr.charAt(i));
}
return true;
}
}
思路二:
通过位运算
不创建额外的空间
因为是异或,所以相异为1,相同为0,就返回false
而且两次循环比较是否是同一个字符即可
外层在0到n-1,内层循环1到n之间
class Solution {
public boolean isUnique(String astr) {
for (int i = 0; i < astr.length() - 1; i++) {
for (int j = i + 1; j < astr.length(); j++) {
if ((astr.charAt(i) ^ astr.charAt(j)) == 0) return false;
}
}
return true;
}
}