今天中午公司要求的小功能写完之后,想了想之前的一道面试题。
题目:
给一个字符串,找到出现次数最多的字母和次数(手写代码)
当时想到了用map,但是写了一半感觉到自己对map还是不熟练,手写写不出来,于是就换了个思路。
原理: 通过字符串分割函数分割字符串,判断分割后的长度来比较字母的次数。
大体功能实现了,String改变次数较多,性能较低,有空了在补充一篇吧,这个主要是思路。
/*
* 程序入口
*/
public static void main(String[] args){
String str = "quaint,hello Word!";
System.out.println(getMaxCharAndNum(str));
}
/*
* 寻找一个字符串中出现次数最多的 字母
*
* 原理: 通过字符串分割函数分割字符串,判断分割后的长度来比较字母的次数.
*
*/
public static String getMaxCharAndNum(String str){
//存储最多出现的次数
int maxNum = 0;
//存储出现最多的字母
String maxChar = "";
//对字符串中不是字母的进行删除,还有重复的字母删除,减少迭代次数
String str_Iterator = removeOtherChar(str);
//防止最后全部一样分割不出来,随便加一个特殊符号
str+="/";
for (int i = 0;i<str_Iterator.length();i++) {
//获取迭代的每一个字符,char-->String 加了一个空字符串
String str_i = str_Iterator.charAt(i)+"";
//对原字符分割后得到数组
String[] strs = str.split(str_i);
//判断数组的长度,这里字符串出现一次会分成两个数组,所以字符串个数为数组长度减一
if(strs.length-1>maxNum){
maxChar=str_i;
maxNum = strs.length-1;
}else if(strs.length-1==maxNum){
//如果有多个字母出现的次数相等,那么","隔开
maxChar+=(","+str_i);
}
}
maxChar+=" 出现次数为:"+maxNum;
return maxChar;
}
/*
* 移除重复的字符,和非字母字符
* 暂时先不处理,主要是一个思路
*/
public static String removeOtherChar(String str){
//这里需要写实现方法
return str;
}
执行结果:
l,l,o,o 出现次数为:2
如果字符串处理函数实现之后,结果应该是下面的
l,o 出现次数为:2
博主比较菜,优化博客地址:
https://blog.csdn.net/quaint_csdn/article/details/84103674