zoukankan      html  css  js  c++  java
  • 找出字符流中第一个不重复的字符

    剑指offer

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

    集合+字符+api

    注意:顺序,key:value

    import java.util.*;
        public class Solution {
    
        /*题目:
        请实现一个函数用来找出字符流中第一个只出现一次的字符。
        例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。
        当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
        */
            /*
            分析:字符:char
                  个数:int
                  顺序:第一次出现一次
                    | 字符      | key  | value |
                    | -------- | ---- | ----- |
                    | 'go'     | g    | **1** |
                    |          | o    | 1     |
                    | 'google' | g    | 2     |
                    |          | o    | 2     |
                    |          | l    | **1** |
                    |          | e    | 1     |
                    思路:
                    需要map来装入key和value,但是要考虑顺序问题用arraylist
                    map: 判断当前键是否在map中
                        如果在 就更改当前键的值,通过键来获取值,然后在 获得的值的基础上 +1
                        如果没在 就添加进入map中,此时键为当前字符,值为1;
                     注意:要  import java.util.*;
             */
            //定义一个hashmap,用来存放键和值
            HashMap<Character,Integer> mp = new HashMap<Character,Integer>();
            //定义一个arraylist,用来保存顺序,直接存放键,然后遍历arraylist中的内容,这个内容就是存放的map中的键
            ArrayList<Character> list = new ArrayList<Character>();
            //Insert one char from stringstream
            public void Insert(char ch)
            {//判断是否由这个键ch
                if(mp.containsKey(ch)){
                    //如果在 就更改当前键的值,通过键来获取值,然后在 获得的值的基础上 +1
                    mp.put(ch,mp.get(ch)+1);
                }else{
                    //如果没在 就添加进入map中,此时键为当前字符,值为1;
                    mp.put(ch,1);
                }
                //直接存放键,用来保存顺序
                list.add(ch);
            }
            //return the first appearence once char in current stringstream
            public char FirstAppearingOnce()
            {//历arraylist中的内容,这个内容就是存放的map中的键
                for(char list_val: list){
                    //通过键来获得内容,此时遍历保证了顺序,从头到尾
                    
                    if(mp.get(list_val) == 1){
                        //如果内容为1,就是第一次出现且出现了一次,然后返回这个键
                        return list_val;
                    }
                }
                //遍历完了list都没有找到符合条件的:第一次出现一次的,就返回‘#’
                return '#';
            }
        }
    
    字符 key value
    'go' g 1
    o 1
    'google' g 2
    o 2
    l 1
    e 1
  • 相关阅读:
    Android studio 安装已经下载好的gradle.zip文件【ubuntu 14.04 LTS环境】
    Python 2.7.6 安装lxml模块[ubuntu14.04 LTS]
    ubuntu14.04 LTS Python IDE专用编辑器PyCharm开发环境搭建
    Git 创建两个“本地分支”协同工作
    关于refs/for/ 和refs/heads/
    Git 多人协作开发的过程
    gerrit_bash_commands.sh
    Ubuntu Eclipse配置Python开发环境
    看看你那张熬完夜的脸
    2016-01-24
  • 原文地址:https://www.cnblogs.com/albertshine/p/13427981.html
Copyright © 2011-2022 走看看