面试题:字符串出现次数最多的字母和次数(基础思路篇)

今天中午公司要求的小功能写完之后,想了想之前的一道面试题。
题目:

给一个字符串,找到出现次数最多的字母和次数(手写代码)

当时想到了用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

猜你喜欢

转载自blog.csdn.net/quaint_csdn/article/details/84102258