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

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

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

文章目录

  • 面试题 01.01. 判定字符是否唯一
    • 一、题目描述
    • 二、解决方案
      • (一)方案一
          • 1、解题思路
          • 2、解题方法
          • 3、复杂度
          • 4、代码实现
      • (二)方案二
          • 1、思路
          • 2、解题方法
          • 3、复杂度
          • 4、Code
    • 三、测试验证

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

一、题目描述

【算法题】面试题 01.01. 判定字符是否唯一_第1张图片

二、解决方案

(一)方案一

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;
    }
}

三、测试验证

方案一:
【算法题】面试题 01.01. 判定字符是否唯一_第2张图片

方案二:
【算法题】面试题 01.01. 判定字符是否唯一_第3张图片

你可能感兴趣的:(#,Java中常用的算法,算法)