判定字符是否唯一
该文章介绍了解决判断字符串中是否所有字符都是唯一的问题。从最差解法到优化解法,包括遍历比较、利用集合和哈希表等不同方法来提高效率。最终给出了多种优化解法,包括利用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
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
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
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
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
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