[简单]LeetCode 2351.第一个出现两次的字母

文章讲述了作者在解决算法题时,从最初的朴素解法(遍历+新建字符串)失败,到采用官方的哈希表(HashSet)方法成功找到字符串中首个重复字符的过程。强调了JavaHashSet在处理此类问题的便利性,并对比了C语言中实现的复杂性。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

题解

第一想法

自去年连续刷了90多道题之后再无接触过算法,目前就是一枚小白,大学学的都丢还给老师了orz,看到此题第一想法malloc个新的空字符串,for循环遍历两次,第二层循环找相同的字母,存到新的字符串中,最后再对新字符串遍历,返回第一个非空字符。。。好吧。。连测试都没过,不知道错哪了

正确题解

官方题解:哈希表!对哇,我咋没想到。。新建一个HashSet,将字符串从头到尾遍历一边,存入HashSet,如果哪个存不进去了,直接返回这个字符就好了啊!!!利用了set的特性 不可重复

class Solution {
    public char repeatedCharacter(String s) {
        Set<Character> seen = new HashSet<Character>();
        for(int i=0;i<s.length();i++){
            char ch = s.charAt(i);
            if(!seen.add(ch)){
                return ch;
            }
        }
        return ' ';
    }
}

总结

Java的HashSet真方便,C语言的话这个题就复杂些了,温故知新哈希表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值