演算法-First Unique Character in a String-字串中的第一個唯一字元

醬油瓶啤酒杯發表於2020-12-23

1、題目描述

給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。

示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2

2、題目分析

  • 與以往的題目不同,這個是找唯一的字元,那就需要遍歷完成之後再二次遍歷
  • 首先考慮使用HashMap,再考慮使用字典
  • 第一次遍歷統計各個字元出現的次數,第二次遍歷找僅出現一次的那個字元

3、程式碼實現

    public int firstUniqChar1(String s) {
        Map<Character,Integer> map = new HashMap<>();
        //統計出現次數
        for(int i = 0;i < s.length();i++){
            map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0) + 1);
        }
        //找第一個出現的唯一元素下標
        for(int i = 0;i < s.length();i++){
            if(map.get(s.charAt(i)) == 1){
                return i;
            }
        }
        return -1;
    }
    //使用字典能降低時間和空間複雜度
	public int firstUniqChar(String s){
        int[] count = new int[26];
        for(int i = 0;i < s.length();i++){
            count[s.charAt(i) - 'a']++;
        }
        for(int i = 0;i < s.length();i++){
            if(count[s.charAt(i) - 'a'] == 1) return i;
        }
        return -1;
    }

4、複雜度分析

  • 時間複雜度:O(N) 兩次遍歷
  • 空間複雜度:O(∣Σ∣) 最多儲存26個不重複字元

相關文章