面试题:寻找字符串中出现频次最高且最先出现的字符
作者:互联网
面试题:寻找字符串中出现频次最高且最先出现的字符
题目:假设有一个字符串,字符串内部的所有字符都是在ascii编码的范围内,编码求出字符串中出现频率最高的字符,如果频率最高的字符有几个字符出现的频率一样,则输出最先出现的字符。
如输入串为"hello world,every body!",则输出频率最高且最先出现的字符’e’
方法定义:char getMaxOccurChar(String str)
思路:
- new一个容器,保存每个字符出现的次数,动态更新最高次数;
- 由于题目要求且最早出现的字符,因此采用倒序遍历;如"aaaccc",正序遍历为c,倒序遍历则为a
- 由于字符都在ASCII编码范围内,则用int[128]的数组来存储出现次数
import java.util.Arrays;
public class StrMaxOccurChar {
public static void main(String[] args) {
String s = "p4r9weugh095eut";
System.out.println(getMaxOccurChar(s));
}
public static char getMaxOccurChar(String s){
char[] arr = s.toCharArray();
int n = arr.length;
if(n == 0) return ' ';
int[] numArr = new int[128];
Arrays.fill(numArr,0);
int i ;
int max = 0;//最高频次
char result = ' ';//结果字符
for(i = n-1;i >= 0;i--){//倒序遍历
int index = (byte)arr[i];
numArr[index] = numArr[index]+1;
if(numArr[index]>=max){//动态更新最高频次及对应字符
max = numArr[index];
result = arr[i];
}
}
return result;
}
}
拓展:
- char转化为ASCII码
int asc = (byte)'a';
- 数组填充API
Arrays.fill(int[] a,int)
标签:字符,面试题,String,index,int,频次,char,numArr,字符串 来源: https://blog.csdn.net/weixin_43202834/article/details/121568288