美文网首页
1.判定字符是否唯一-java实现

1.判定字符是否唯一-java实现

作者: ontheway_sh | 来源:发表于2020-08-16 19:57 被阅读0次

    刷题发现还有一个面试题模块,109个题,优先刷这里吧

    第一题:判定字符是否唯一

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

    输入: s = "leetcode"
    输出: false 
    

    示例 2:

    输入: s = "abc"
    输出: true
    

    限制:
    0 <= len(s) <= 100
    如果你不使用额外的数据结构,会很加分。

    V1版本

    这题一看就很方便实现,一个Set就能解决,
    不过有个限制是不使用额外的数据结构,会很加分,这个留到V2吧
    代码如下

        public boolean isUnique(String astr) {
            if (astr == null || "".equals(astr)) {
                return true;
            }
            Set<Character> set = new HashSet<>();
            for (int i = 0; i < astr.length(); i++) {
                if (!set.add(astr.charAt(i))) {
                    return false;
                }
            }
            return true;
        }
    
    image.png

    实现很简单,效率也很快,就是用hashset废点空间

    V2版本

    不使用额外的数据结构,那就用数组吧,考虑字符只有字母的情况
    字母A对应char code为65
    字母z对应char code为122
    定义一个大小为58的的数组,默认全填充为-1
    每获取一个字符,添加进数组中,填充时如果值不为-1则说明重复了
    代码如下

        public boolean isUnique(String astr) {
            if (astr == null || "".equals(astr)) {
                return true;
            }
            char A = 'A';
            int[] array = {
                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                    -1, -1, -1, -1, -1, -1, -1, -1
            };
            int num;
            for (int i = 0; i < astr.length(); i++) {
                num = astr.charAt(i) - A;
                if (array[num] != -1) {
                    return false;
                }
                array[num] = num;
            }
            return true;
        }
    
    image.png

    V3版本

    看了下评论区的实现,V2版本是我理解错了,不使用额外的数据结构是连数组也不能使用
    参考了indexOf解法,一个字符从前向后查找和从后向前查,出现的位置都一样
    代码如下

        public boolean isUnique(String astr) {
            if (astr == null || "".equals(astr)) {
                return true;
            }
            for (int i = 0; i < astr.length(); i++) {
                if (astr.indexOf(astr.charAt(i)) != astr.lastIndexOf(astr.charAt(i))) {
                    return false;
                }
            }
            return true;
        }
    
    image.png

    相关文章

      网友评论

          本文标题:1.判定字符是否唯一-java实现

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