找到第一个不重复的字符

博客讨论如何找到字符串中第一个不重复的字符。建议使用哈希表来存储字符及其出现次数,通过迭代字符串和检查哈希表中字符的重复次数,找到重复次数为1的字符即为结果。虽然哈希表的输出顺序可能与输入顺序不同,但可以再次迭代字符串以找到首个出现一次的字符。
摘要由CSDN通过智能技术生成

找到第一个不重复的字符

例如:
a happy pig
a 重复2次
h 重复1次
p 重复3次
y 重复1次
g 重复1次
i 重复一次
编写一个返回第一个不重复字符h的方法


什么样得数据结构最适合快速查找项目?

可以使用哈希表存储每个字符及其重复的次数。

1.构建哈希表

2.迭代字符串

3.得到当前字符串并查找它重复的次数

4.是重复就忽略,继续查询下一个字符
空格重复了两次,继续下一个
然后到达h,是第一个不重复的字符,停止迭代并返回该字符

public class CharFinder {
  public  char findFirstNonRepeatingChar(String str){
    
      Map<Character,Integer> map = new HashMap<>();
    
      for(var ch:str.toCharArray()){
    //如果哈希表有字符则获取该字符的值并计数,否则置为0
          var count = map.containsKey(ch) ? map.get(ch):0;
    
          map.put(ch,count+1);
      }
    
      System.out.println(map);
    
     return 0;
  }
}

CharFinder cf = new CharFinder();
cf.findFirstNonRepeatingChar("a happy pig");

show

在这里插入图片描述

有趣的是,这些键和字符串中的字符顺序不同,a是我们输入的第一个字符,我们也希望看到哈希表输出第一个字符为a,这完全是因为哈希表中哈希函数的映射,所以项不是按顺序添加到内存中的。

现在我们知道了每一个字符出现的频率,需要将输入的字符串再次进行迭代,在哈希表中查找每个字符,如果值为1,则返回该字符

for(var ch:str.toCharArray()){
    if(map.get(ch)==1)
        return ch;
}
return Character.MIN_VALUE;

show

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值