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

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

    题目描述

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

    输入描述

    如果当前字符流没有存在出现一次的字符,返回#字符。

    思路

    1. 模拟一个哈希表,长度为256,索引为字符的编码,初始化为-1,第一次出现时把该字符出现的位置赋给该数组元素,第二次出现时赋给-2,说明已经不是只出现一次了。最后遍历数组,找到值非负的最小的元素的索引就是第一个只出现一次的字符,用(char)强转一下即可。

    代码

    public class Solution {
        int[] cArr = null;
    	int index = 0;
    	Solution() {
    		cArr = new int[256];
    		for (int i = 0; i < 256; i++) {
    			cArr[i] = -1;
    		}
    	}
    	//Insert one char from stringstream
        public void Insert(char ch)
        {
            if (cArr[ch] == -1) {
            	cArr[ch] = index;
            } else if (cArr[ch] >= 0) {
            	cArr[ch] = -2;
            }
            index++;
        }
      //return the first appearence once char in current stringstream
        public char FirstAppearingOnce()
        {
        	int min = Integer.MAX_VALUE;
        	char ch = '#';
        	for (int i = 0; i < cArr.length; i++) {
        		if (cArr[i] >= 0 && cArr[i] < min) {
        			min = cArr[i];
        			ch = (char)i;
        		}
        	}
        	return ch;
        }
    }
  • 相关阅读:
    磁盘冗余阵列之RAID5的配置
    国际C语言混乱代码大赛优胜作品详解之“A clock in one line”
    C#数据结构_树
    C#数据结构_栈和队列
    C#数据结构_基本概念及线性表
    C#数据结构_排序
    unity之shader
    Unity之Update与FixedUpdate区别
    unity之游戏特效
    unity之加载场景
  • 原文地址:https://www.cnblogs.com/rosending/p/5693081.html
Copyright © 2011-2022 走看看