首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 “go” 时,第一个只出现一次的字符是 “g”。...当从该字符流中读出前六个字符“google" 时,第一个只出现一次的字符是 “l”。...解题思路 使用统计数组来统计每个字符出现的次数,本题涉及到的字符为都为 ASCII 码,因此使用一个大小为 128 的整型数组就能完成次数统计任务。...使用队列来存储到达的字符,并在每次有新的字符从字符流到达时移除队列头部那些出现次数不再是一次的元素。因为队列是先进先出顺序,因此队列头部的元素为第一次只出现一次的字符。...} System.out.println("queue = " + firstAppearChar.getQueue() ); System.out.println("字符流中第一个不重复的字符

51410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。...当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 解题思路 用一个哈希表来存储每个字符及其出现的次数,另外用一个字符串 s 来保存字符流中字符的顺序。...每次插入的时候,在字符串 s 中插入该字符,然后在哈希表中查看是否存在该字符,如果存在则它的 value 加1,如果不存在,它在哈希表中插入该字符,它的 value 为 1。...查找第一个只出现一次的字符时,按照 s 的顺序,依次查找 map 中字符出现的次数,当 value 为 1 时,该字符就是第一个只出现一次的字符。

    77220

    替换后的最长重复字符

    替换后的最长重复字符 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换k次。在执行上述操作后,找到包含重复字母的最长子串的长度。...,当然也有可能采用动态规划的做法,本题使用双指针维护滑动窗口,这个题目官方的思路比较好,就直接以官方的思路做个解释,我们可以枚举字符串中的每一个位置作为右端点,然后找到其最远的左端点的位置,满足该区间内除了出现次数最多的那一类字符之外...我们以示例的ABAB 2为例来模拟一遍这个过程,过程为每次循环结束的位置,注意第四次循环结束后right===n。...,定义数组并初始化值为0用以记录各个字符的数量,之后定义maxn用以记录出现次数最多的值,以及left与right两个指针,之后定义循环,首先取得right指针的ASCII-26值,将记录数组中这个字符的数量...++,之后使用Math.max取得当前字符数量出现的最大值,注意此时由于我们是逐个增加记录数组中的值,并且左指针右移时将字符的值--,所以我们只需要取得之前的最大值与当前处理的字符的数组最大值即可,之后比较窗口的长度与

    94420

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

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。...当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。...后台会用以下方式调用Insert 和 FirstAppearingOnce 函数 返回值描述: 如果当前字符流没有存在出现一次的字符,返回#字符 思路1: map计算数量,链表保存各字符以及其绝对位置...; //存放每个字符以及其数量 Map countRes=new HashMap(); //由于hashmap是无需的因此这里存放一个原始字符串...,存放字符串的每个字符,其索引及其位置 List listStr=new LinkedList(); public void Insert(char ch)

    37730

    字符串中的第一个唯一字符

    字符串中的第一个唯一字符 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回-1。...,在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数,在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回-1即可。...当然此处是使用的哈希表进行存储,如果使用两个数组进行存储的话可能会快一些,哈希表要计算HashCode,然后再按照HashCode取索引,当字符串比较长的时候可能还会引起Hash表底层数据的扩容从而产生...ReHash,同时Hash碰撞也是要考虑的成本。...首先建立一个哈希表,直接构建没有原型的对象即可,之后使用数组的原型方法forEach循环这个字符串,构建哈希表,在键不存在时将此键的值设置为1,否则就自增值,之后获取字符串长度,建立循环,如果这个键在哈希表中的值为

    48620

    剑指Offer(五十四)-- 字符流中第一个不重复的字符

    /CodeSolution 笔记地址:https://damaer.github.io/CodeSolution/ 仓库介绍:刷题仓库:CodeSolution 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符...例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。...返回值描述:如果当前字符流没有存在出现一次的字符,返回#字符。 思路以及解答 这道题有两个函数要求实现,主要是输入函数和输出函数,一个是读入新的字符,另外一个是输出第一个只出现一次的字符。...添加元素的函数: 判断计数数组里面,字符出现的个数是不是为0,为0则往队列里面添加元素,如果不为0,添加了没有意义,说明包括当前出现的至少出现了两次。同时更新计数器。...查找第一个只出现一次的字符判断队列里面是否为空,取出第一个元素,不为空的时候,判断计数器里面该字符出现的次数是不是为1,为1的时候直接返回该字符,如果不是1,那么直接把该字符从队列里面移除,说明出现不止一次了

    33220

    387 字符串中的第一个唯一字符

    01 题目信息 题目地址: https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 给定一个字符串,找到它的第一个不重复的字符...然后LeetCode的测试用例字符串也是真的长 ? ? ? (只截取了部分下面还可以翻页),所以在n^2的情况下超时。 03 解法二:细节优化(解一) 上面的解法是有可优化的点的。...我们去查找第一个只出现一次的,那么一个值找到相同的后我们就不必要再往后了遍历因为不需要看它有几个相同的,它不满足就应该看下一个值也就是应该加上break。...其实我们去表达循环完后的处理也可以在循环体里面,也就是循环到最后了仍然不满足相等。 for(int j = 0; j < n; j++){ if(i !...统计完之后遍历字符串按字符串的顺序去数组查率先等于1的就返回 public int firstUniqChar(String s) { int[] chars = new int[26];

    62110

    漫画:字符串中的第一个唯一字符

    先看题目: 01 第141题:环型链表 第141题:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 案例: s = "leetcode" 返回 0....注意事项:您可以假定该字符串只包含小写字母。 常考题目,建议自行思考1-2分钟先~ 02 图解分析 题目不难,直接进行分析。...由于字母共有26个,所以我们可以声明一个26个长度的数组(该种方法在本类题型很常用)因为字符串中字母可能是重复的,所以我们可以先进行第一次遍历,在数组中记录每个字母的最后一次出现的所在索引。...然后再通过一次循环,比较各个字母第一次出现的索引是否为最后一次的索引。...如果是,我们就找到了我们的目标,如果不是我们将其设为-1(标示该元素非目标元素)如果第二次遍历最终没有找到目标,直接返回-1即可。

    37710
    领券