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

今天偶然接触到了一个编程网站,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段,解决的问题越多,执行速度越快,提高的越快。

你可能感兴趣的:(随笔)