「ソードフィンガーオファー」-54。キャラクターストリームの最初の繰り返されないキャラクター

1.この質問の知識ポイント

ハッシュ表

2.タイトルの説明

文字ストリームに一度だけ現れる最初の文字を見つける関数を実装してください。たとえば、最初の2文字の「go」が文字ストリームから読み取り専用である場合、1回だけ表示される最初の文字は「g」です。この文字ストリームから最初の6文字「google」を読み取る場合、1回だけ表示される最初の文字は「l」です。

現在の文字ストリームに1回出現する文字がない場合は、#文字が返されます。

3.問題解決のアイデア

  1. HashMapを使用して、各文字とその出現回数の間のマッピングを作成します
  2. 文字列を順番にトラバースし、1回出現する最初の文字を見つけて、その文字を返します
  3. 現在の文字ストリームに1回出現する文字がない場合は、#文字を返します

4.コード

public class Solution {
    
    
    String str = "";

    public void Insert(char ch) {
    
    
        str += ch;
    }

    public char FirstAppearingOnce() {
    
    
        // 用 HashMap 建立每个字符与其出现次数的映射
        HashMap<Character, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
    
    
            char c = str.charAt(i);
            hashMap.put(c, hashMap.getOrDefault(c, 0) + 1);
        }

        // 依次遍历字符串,找到第一个出现次数为 1 的字符,返回该字符
        for (int i = 0; i < str.length(); i++) {
    
    
            char c = str.charAt(i);
            if (hashMap.get(c) == 1) {
    
    
                return c;
            }
        }
        // 如果当前字符流没有存在出现一次的字符,返回 # 字符
        return '#';
    }
}

おすすめ

転載: blog.csdn.net/bm1998/article/details/112962030