目录

一、:⾯试题 01.01.判定字符是否唯⼀
题目链接::⾯试题 01.01.判定字符是否唯⼀
题目描述:
题目解析:
- 给一个字符串,看字符串中字符是否有重复,有返回false,没有返回true。
1.1 位图
解题思路:
- 因为这个字符串全是小写字符,所以只有26个字符,并且求得是是不是有重复。
- 那么我们就可以使用一个int的32个比特位来表示,字符’a’到’z’分别对应二进制的0到25下标。
- 如果下标变成1,后出现了该下标对应的字母,那么就是有重复字符。
- 拿到二进制第 i 位是1还是0:(x >> i) & 1
- 将二进制第 i 位变为1:x = x | (1 << i)
解题代码:
//时间复杂度:O(N)
//空间复杂度:O(1)
class Solution {
public boolean isUnique(String astr) {
if(astr.length() > 26) return false;
int bit = 0;
for(int i = 0; i < astr.length(); i++) {
int temp = bit;
if( ( (temp >> astr.charAt(i) ) & 1) == 1) return false;
bit = bit | ( 1 << astr.charAt(i));
}
return true;
}
}
1.2 hash思路
解题思路:
- 使用一个hash数组来记录每个字符出现的次数,因为全是小写字母,只需申请有效空间即可。
解题代码:
//时间复杂度:O(N)
//空间复杂度:O(1)
class Solution {
public boolean isUnique(String astr) {
if(astr.length() > 26) return false;
int[] hash =