题目来源:《程序员面试金典(第 6 版)》
1、Problem: 面试题 01.01. 判定字符是否唯一
文章目录
- 面试题 01.01. 判定字符是否唯一
- 一、题目描述
- 二、解决方案
- (一)方案一
- 1、解题思路
- 2、解题方法
- 3、复杂度
- 4、代码实现
- (二)方案二
- 1、思路
- 2、解题方法
- 3、复杂度
- 4、Code
- 三、测试验证
面试题 01.01. 判定字符是否唯一
一、题目描述
二、解决方案
(一)方案一
1、解题思路
- 第一轮遍历:从第一个字符开始,依次与后面的所有字符作比较。如果存在相同就直接返回false,退出循环;如果不存在相同,则继续进行第二轮遍历。
- 第二轮遍历:从第二个字符开始,依次与后面的所有字符作比较。
- 第三轮遍历:从第三个字符开始,依次与后面的所有字符作比较。
- 依次类推,直至完成第n-1轮遍历。
2、解题方法
使用双重循环进行遍历求解。
3、复杂度
-
时间复杂度: O ( n 2 ) O(n^2) O(n2)
-
空间复杂度: O ( n ) O(n) O(n)
4、代码实现
class Solution {
public boolean isUnique(String astr) {
for(int i=0; i<astr.length()-1; i++) {
char ch = astr.charAt(i);
for(int j=i+1; j<astr.length(); j++) {
if(ch == astr.charAt(j)) {
return false;
}
}
}
return true;
}
}
(二)方案二
1、思路
使用 HashMap 来存放字符,并统计字符个数,当字符个数大于1时,表示存在字符重复,直接返回 false。当遍历完字符串中所有的字符后,仍没有重复字符出现,则返回 true。
2、解题方法
使用 HashMap 来存放字符并统计字符个数。
3、复杂度
-
时间复杂度: O ( n ) O(n) O(n)
-
空间复杂度: O ( n ) O(n) O(n)
4、Code
class Solution {
public boolean isUnique(String astr) {
Map<Character, Integer> map = new HashMap();
for(int i=0; i<astr.length(); i++) {
char ch = astr.charAt(i);
if(map.get(ch) == null || map.get(ch) == 0) {
map.put(ch, 1);
} else {
map.put(ch, map.get(ch)+1);
}
if(map.get(ch) > 1) {
return false;
}
}
return true;
}
}
三、测试验证
方案一:
方案二: