【算法题】面试题 01.01. 判定字符是否唯一

题目来源:《程序员面试金典(第 6 版)》

1、Problem: 面试题 01.01. 判定字符是否唯一

面试题 01.01. 判定字符是否唯一

一、题目描述

在这里插入图片描述

二、解决方案

(一)方案一

1、解题思路
  1. 第一轮遍历:从第一个字符开始,依次与后面的所有字符作比较。如果存在相同就直接返回false,退出循环;如果不存在相同,则继续进行第二轮遍历。
  2. 第二轮遍历:从第二个字符开始,依次与后面的所有字符作比较。
  3. 第三轮遍历:从第三个字符开始,依次与后面的所有字符作比较。
  4. 依次类推,直至完成第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;
    }
}

(三)方案三

1、思路

构造一个布尔值的数组,索引值 i 对应的标记指示该字符串是否含有字符表第 i 个字符。

2、解题方法

布尔值的数组。

3、复杂度
  • 时间复杂度: O ( n ) O(n) O(n)

  • 空间复杂度: O ( 1 ) O(1) O(1)

4、Code

/**
 * 构造一个布尔值的数组,索引值 i 对应的标记指示该字符串是否含有字符表第 i 个字符。
 */
class Solution {
    
    
    public boolean isUnique(String astr) {
    
    
        if(astr.length() > 128) {
    
     // 如果字符串的长度超过了字母表中不同字符的个数,则直接返回false
            return false;
        }

        boolean[] char_set = new boolean[128];
        for(int i=0; i<astr.length(); i++) {
    
    
            int val = astr.charAt(i); 
            if(char_set[val]) {
    
     // 在字符串中已找到该字符
                return false;
            }
            char_set[val] = true;
        }
        return true;
    }
}

三、测试验证

方案一:
在这里插入图片描述

方案二:
在这里插入图片描述

方案三:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Shipley_Leo/article/details/131140880
今日推荐