zoukankan      html  css  js  c++  java
  • 【剑指Offer】54、字符流中第一个不重复的字符

      题目描述:

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

      输出描述:

      如果当前字符流不存在只出现一次的字符,返回“#”字符。

      解题思路:

      本题还是相当简单的,有点类似于第34题:第一个只出现一次的字符,只不过本题是字符流序列。解题思路也比较类似,将字节流保存起来,通过哈希表统计每个字符出现的次数,然后再从头遍历字符流,找到第一个次数为1的字符,就是我们要找的目标。

      这里,为了简单,可以用数组代替哈希表,将字符的ASCLL码作为数组下标,字符对应出现的次数作为数组的元素进行保存。

      编程实现(Java):

    public class Solution {
        /*
        思路:用hashmap保存每个字符出现的次数 或者 用长度为256的数组代替哈希表
        还有一种是使用indexof和lastIndexof
        */
        String str="";
        int[] charToCount=new int[256]; //256个字符
        //Insert one char from stringstream
        public void Insert(char ch)
        {
            str+=ch;
            charToCount[ch]+=1;
        }
      //return the first appearence once char in current stringstream
        public char FirstAppearingOnce()
        {
            for(int i=0;i<str.length();i++){
                char c=str.charAt(i);
                if(charToCount[c]==1)
                    return c;
            }
            return '#';
        }
    }
    
  • 相关阅读:
    Linux 下安装JDK1.8
    Linux 常规操作
    C3P0连接池拒绝连接
    Oracle查看并修改最大连接数
    Oracle 建立 DBLINK
    Oracle 数据 update后怎么恢复到以前的数据
    Oracle 11g中解锁被锁定的用户
    身份证15位转18位
    Druid数据库连接池
    CentOS 下安装 LEMP 服务(Nginx、MariaDB/MySQL 和PHP)
  • 原文地址:https://www.cnblogs.com/gzshan/p/10880175.html
Copyright © 2011-2022 走看看