题目
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:
输入: s = "abc"
输出: true
限制:
0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分。
解法
第一种 使用一个map把遍历拿到每个字符作为key作为主键进行存取
或者使用一个set存放已经遍历过的字符 然后每次循环都判断是否在set中已经存在了
第二种 排序后 根据相邻的字段进行比较
import java.util.Arrays;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isUnique(String astr) {
boolean result = true;
if (astr == null || astr.length() == 1) {
return result;
}
// 第一种 使用一个map把遍历拿到每个字符作为key作为主键进行存取
// 第二种 排序后 根据相邻的字段进行比较
char[] chars = astr.toCharArray();
Arrays.sort(chars);
for (int i = chars.length-1; i>0; i--) {
if (chars[i] == chars[i-1]) {
result = false;
break;
}
}
return result;
}
}
//leetcode submit region end(Prohibit modification and deletion)
第三种是位运算
import java.util.Arrays;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isUnique(String astr) {
// 第一种 使用一个map把遍历拿到每个字符作为key作为主键进行存取
// 第二种 排序后 根据相邻的字段进行比较
// 第三种 使用位运算
int process = 0;
int spacing = 0;
for (int i = astr.length()-1; i>=0; i--) {
spacing = astr.charAt(i) - 'a';
if ((process & 1<<spacing) !=0) {
return false;
}
process ^= 1<<spacing;
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)
当然这种我觉得限制条件有很多
当然这种效果最好
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:35.8 MB,击败了94.59% 的Java用户
总结
涉及算法
- 位运算
- 哈希表
- 字符串
- 排序
思考回顾
用位运算的话 可以减少空间的损耗
但是这点空间我觉得没有必要节省
除非是有空间限制的设备还需考虑
使用的时候当然还是要看使用场景 如果是需要中文
位运算就不可以用了 这个时候我认为还是使用set存放已经遍历的过字符好点
网友评论