一行代码解决判断字符串中是否有重复字母?

本文分享了一位新手程序员在Codewars上解决字符串重复字符判断问题的经验,介绍了使用Java 8特性如chars()和distinct()方法一行代码解决问题的巧妙方式,强调了该平台对提升算法能力和英语水平的帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天偶然接触到了一个编程网站,codewars。全英文的,花了十分钟总算搞懂了第一道题是让我干嘛的。

让我判断测试用例的字符串中是否存在重复的字母,不论连续或是不连续,如果存在则返回false,不存在则返回true。是个经典问题。

首先冒出的想法就是循环遍历呗,用两重for循环,一层i=0,第二层i=i+1,然后用string.charAt(i)去作判断条件,不过得用toLowerCase方法统一下大小写,因为我看样例是不区分大小写的。或者说用集合判断,三大集合 List,Map,Set都可以实现,ArrayList.contains(0方法,hashMap.containsKey()的方法,hashSet因为集合时不重复的,直接用最后hashSet.size和String.length去判断就可以。以上这些方法只是我一个刚毕业三个月的新手想到的,想不出什么深奥的解法。但以上这些方法的实现是一行代码都解决不了的。

在我在codewars的代码框写完代码后,看到了一个solution选项,以为这个是完成按钮,点开后发现是各路神仙的解决答案,就是因为我的不小心点错了,真是打开了我的新世界大门,没想到就是这么一个小问题可以让我学到很多平常写业务代码接触不到的java只是和逻辑,这个solution里是有投票选项的,这里的一个最佳解决方案以及最聪明的解决方案是一行代码实现了这个问题。

return str.length() == str.toLowerCase().chars().distinct().count();

toLowerCase()方法明白,可是这个chars()是个什么玩意儿?网上查了一下,发现是java8新加入的方法,目的是返回字符的intStream数值流,distinct()也是java8中新加入的方法,是去除重复数据,count()很好理解。

chars(),distinct()这两个方法还没仔细看,还没有理解,以及对流的概念也不清晰,也算是在一道小编程题中找到了自己的不足和要学习的目标,先记录下,省的一会下班忘了。

同时给大家推荐下codewars这个网站,不但能提高自己的英语阅读水平,也可以提高自己的算法,并且它是有等级的,刚注册是8kyu,也就是8段,解决的问题越多,执行速度越快,提高的越快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值