0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# 解决剑指offer:字符流中第一个不重复的字符

1.简述:

描述

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

数据范围:字符串长度满足 #yyds干货盘点# 解决剑指offer:字符流中第一个不重复的字符_数据 ,字符串中出现的字符一定在 ASCII 码内。

进阶:空间复杂度 #yyds干货盘点# 解决剑指offer:字符流中第一个不重复的字符_字符串_02 ,时间复杂度 #yyds干货盘点# 解决剑指offer:字符流中第一个不重复的字符_数据_03

后台会用以下方式调用 Insert 和 FirstAppearingOnce 函数

返回值描述:

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

示例1

输入:

"google"

复制返回值:

"ggg#ll"

复制

示例2

输入:

"abcdee"

返回值:

"aaaaaa"

2.代码实现:

import java.util.*;
public class Solution {
private StringBuilder s = new StringBuilder();
private HashMap<Character, Integer> mp = new HashMap<>();
//Insert one char from stringstream
public void Insert(char ch)
{
//插入字符
s.append(ch);
//哈希表记录字符出现次数
mp.put(ch, mp.getOrDefault(ch, 0) + 1);
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
//遍历字符串
for(int i = 0; i < s.length(); i++)
//找到第一个出现次数为1的
if(mp.get(s.charAt(i)) == 1)
return s.charAt(i);
//没有找到
return '#';
}
}


举报

相关推荐

0 条评论