栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java题解】面试题 01.01. 判定字符是否唯一

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java题解】面试题 01.01. 判定字符是否唯一

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = “leetcode”
输出: false

示例 2:

输入: s = “abc”
输出: true

限制:

0 <= len(s) <= 100

如果你不使用额外的数据结构,会很加分。

方法一:
使用set或者map,进行一次遍历即可。

代码:

class Solution {
    public boolean isUnique(String astr) {
        // map set
        Set set = new HashSet<>();
        for (int i = 0; i < astr.length(); i++) {
            char c = astr.charAt(i);
            if (set.contains(c)) return false;
            else set.add(c);
        }
        return true;
    }
}

时间复杂度:O(n)
空间复杂度:O(n)

方法二:
使用char数组,先排序,然后遍历判断前后元素是否相等。

class Solution {
    public boolean isUnique(String astr) {
        char[] arr = astr.toCharArray();
        Arrays.sort(arr);
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] == arr[i - 1]) return false;
        }
        return true;
    }
}

时间复杂度:O(nlgn)
空间复杂度:O(n)

方法三:
不适用额外的数据结构,用位运算。
a : a - ‘a’ = 0
b : b - ‘a’ = 1

那么让1 << 0, 1 << 1,对应的二进制为:1 10 这样就能利用二进制中的1的位置来区分不同的字母。
如果现在的二进制 & (1 << 一个字母 - 'a’得到的数) == 1 那就说明已经存在这个字母了,return false; 如果 ==0,那么就让现在的二进制对应的位置,置为1,通过 | 就可以了。

代码:

class Solution {
    public boolean isUnique(String astr) {
        // 不使用额外的数据结构
        int mark = 0;
        for (int i = 0; i < astr.length(); i++) {
            int moveBit = astr.charAt(i) - 'a';
            if ((mark & (1 << moveBit)) != 0) return false;
            mark |= 1 << moveBit;
        }
        return true;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号