美文网首页人生几何?
[LeetCode]-一个字符串 s 的所有字符是否全都不同

[LeetCode]-一个字符串 s 的所有字符是否全都不同

作者: 一个好汉 | 来源:发表于2021-09-11 22:02 被阅读0次

    题目

    实现一个算法,确定一个字符串 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存放已经遍历的过字符好点

    相关文章

      网友评论

        本文标题:[LeetCode]-一个字符串 s 的所有字符是否全都不同

        本文链接:https://www.haomeiwen.com/subject/ejwawltx.html