java计算字符串中出现次数最多的字符
昨天在做作业的时候发现了一个有趣的题目,也就是标题这个题目,然后就自己捣鼓了一个算法,就是为了计算字符串中出现次数最多的字符。这个算法有一个值得注意的点就是如果同种字符出现次数相同,那就取最早出现的那种
public static Object[] paixu(String arr) {
/*
* 思路就是:相同的字母放在一排,然后在排另一种字母的时候就在上一种字母下标的下一位开始作比较。
* 设计原因:避免不必要的重复比较
*/
char list[] = arr.toCharArray();//把字符串转换成字符数组
int index = 0;//记录每一种字母最后一个索引
int maxIndex = 0;//记录字母出现的个数
int max = 0;//中间级
char maxValue = ' ';//出现次数最多的值
for (int i = 0; i < list.length-1; i++) {
if (i<=index) {//这个判断是很重要的,为了保持i和index在比较完一种字符之后还能保持相同,保证算法的正确性
i=index;
}else {
index = i;
}
for (int j = i+1; j < list.length; j++) {
if (list[i]==list[j]) {
index++;
maxIndex++;
char record = list[index];//记录该位置的值
list[index] = list[j];//交换位置
list[j] = record;//交换位置
}
}
if (maxIndex>max) {//记录出现次数最多的值和出现的次数
maxValue = list[i];
max = maxIndex;
}
maxIndex = 0;//初始化出现次数
}
for (int i = 0; i < list.length; i++) {//打印最后结果
System.out.print(list[i]);
}
System.out.println();
Object obj[] = {maxValue,max+1};
return obj;
}
测试代码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入全字母的字符串:");
String arr = sc.next();
System.out.println("当前的字符串是:"+arr+" 长度是:"+arr.length());
Object obj[] = paixu(arr);
System.out.println("最早出现次数最多的字母:"+obj[0]);
System.out.println("出现的次数:"+obj[1]);
}
效果
当然也可以是其他字符串。
import java.util.*;
public class Main{
public static void main(String age[]){
Scanner scanner = new Scanner(System.in);
int count[] = new int[256];
char chars[] = scanner.next().toCharArray();
/*
这种统计是只能统计char范围内的字符,比如a,a对应的char是九十多,
就会在对应的下标+1,这就是统计字符
*/
for(int i = 0;i < chars.length;i++){
count[chars[i]]++;
}
System.out.println(Arrays.toString(count));
}
}