字符流中第一个不重复的字符

字符流中第一个不重复的字符

题目描述

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

分析

  1. 如果作为Java开发,可能第一想到的是利用Map的特性实现,同时可以使用LinkedHashMap,利用有序的特性找到第一个符合要求的字符。
  2. 利用相同的思想,可以建立一个长度256的数组,代表ASCII的256个字符。值代表出现次数。

实现1

private Map<Character, Integer> map = new LinkedHashMap<>();

//Insert one char from stringstream
public void Insert(char ch) {
       if (map.containsKey(ch)) {
           map.put(ch, map.get(ch) + 1);
       } else {
           map.put(ch, 0);
       }
}

//return the first appearence once char in current stringstream
public char FirstAppearingOnce() {
       for (Map.Entry<Character, Integer> set : map.entrySet()) {
           if (set.getValue() == 0) {
               return set.getKey();
           }
       }
       return '#';
}

实现2

List<Character> input = new ArrayList<>();
char[] hash = new char[256]; 

//Insert one char from stringstream
public void Insert(char ch)
    {
        input.add(ch);
        hash[ch]++;
    }
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
        for (int i = 0; i < input.size(); ++i) {
            if (hash[input.get(i)] == 1) {
                return input.get(i);
            }
        }
        return '#';
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇