远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)
  • 判定字符是否唯一
  • Leetcode
terwer
2024-06-13

判定字符是否唯一

该文章介绍了解决判断字符串中是否所有字符都是唯一的问题。从最差解法到优化解法,包括遍历比较、利用集合和哈希表等不同方法来提高效率。最终给出了多种优化解法,包括利用set、map和replace函数等,以及对比它们的效率和实现方式。

# leetcode

https://leetcode-cn.com/problems/is-unique-lcci/ (opens new window)

# 最差解法

class Solution {
    public boolean isUnique(String astr) {
        char[] strArray = astr.toCharArray();
        for (int i = 0; i < strArray.length; i++) {
            char str = strArray[i];
            for (int j = 0; j < strArray.length; j++) {
                if (i == j) {
                    continue;
                }
                char newstr = strArray[j];

                if (str == newstr) {
                    return false;
                }
            }
        }
        return true;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

遍历次数 n*n

# 优化解法

class Solution {
    public boolean isUnique(String astr) {
        char[] strArray = astr.toCharArray();
        for (int i = 0; i < strArray.length; i++) {
            char str = strArray[i];
            for (int j = i + 1; j < strArray.length; j++) {
                char newstr = strArray[j];

                if (str == newstr) {
                    return false;
                }
            }
        }
        return true;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

https://leetcode-cn.com/submissions/detail/257308501/

第二轮遍历没必要从头开始,遍历次数

1*(n-1) +2*(n-2) + ... (n-2)*2 + (n-1)*1 + n(n-n)

# 优化解法 2

import java.util.HashSet;

class Solution {
    public boolean isUnique(String astr) {
        char[] strArray = astr.toCharArray();

        Set set = new HashSet<>();
        for (char c : strArray) {
            set.add(String.valueOf(c));
        }

        if(set.size() == strArray.length){
            return true;
        }
        return false;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

https://leetcode-cn.com/submissions/detail/260226448/

利用 set

# 优化解法 3

import java.util.HashMap;

class Solution {
    public boolean isUnique(String astr) {
        char[] strArray = astr.toCharArray();

        Map map = new HashMap<>();
        for (char c : strArray) {
            map.put(c, c);
        }

        if (map.size() == strArray.length) {
            return true;
        }
        return false;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

https://leetcode-cn.com/submissions/detail/260234354/

利用 map

# 优化解法 4

class Solution {
    public boolean isUnique(String astr) {
        String result = astr;
        for (int i = 0; i < astr.length(); i++) {
            result = astr.replace(String.valueOf(astr.charAt(i)), "");

            if (result.length() != astr.length() - 1)
                return false;
        }
        return true;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

https://leetcode-cn.com/submissions/detail/260243878/

利用 replace

# java

未完待续

# c

未完待续

编辑 (opens new window)
上次更新: 2024/06/13, 12:00:44
最近更新
01
深入剖析MyBatis的架构原理
12-04
02
通用 Mapper 封装
10-09
03
插件源码进一步分析与pageHelper分页插件介绍
10-09
更多文章>
Theme by Vdoing | Copyright © 2011-2024 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式