遍历一次字符串,选择出在该字符串中出现次数最多的字符及其出现次数(Java)

来源:互联网 发布:淘宝怎么没法进店 编辑:程序博客网 时间:2024/05/16 13:06

上班的时候,听一个同事说起了百度的一个面试题。“遍历一次字符串,选择出在该字符串中出现次数最多的字符及其出现次数”

比如说当前的字符串为"abc2d2e2fg2e1111bc11yh22fd2a2ai222eur张灯结彩",则我应得到的是字符2,出现次数11。

特定需求,只通过一次遍历来获取。

也就是说,只能循环字符串一次,大概看了一下,就开始入手了。于是写下了下面的代码:

 

通过Main方法调用,是正确的。

这时,同事看了以后说,你写的这个方法中对map还进行了一次遍历。这样也算是2次遍历了。

于是,开始纠结了。。。。。。。。。。。。。。

要在一次遍历中实现此功能,同时不借助Map等也需要进行遍历的操作。这样,就需要我在每一次的循环中,

就要获取此次循环字符在整个字符串中的出现次数。有的同事也提出了用正则表达式,我对正则表达式属于用到

的时候才去找其定义规则,还不能灵活运用。或许还有别的方法,字符串的操作,看到replaceAll的时候,感觉

豁然开朗了。于是有了下面的一个方法:

 

以及下面用while的一段实现,跟for循环类似。就当熟悉一下吧。

 

在写完这些后,又仔细看了一下,replaceAll这个方法,内部是否也是一层遍历呢?

 public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
纠结,俺先去学正则表达式了。



根据大家的评论,又增加了一个方法: