import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
int n = s.length();
int temp = 0;
int[] nums = new int[n];
int[] sc = new int[26];
for(int i=0;i<n;i++)
{
nums[i]=s.charAt(i); //如果a,那么nums[i]=97
}
//for(int i=0;i<n-1;i++)
//for(int j=0;j<n-i-1;j++)
//{
// if(nums[j]>nums[j+1]){
// temp=nums[j];
// nums[j]=nums[j+1];
// nums[j+1]=temp;
// }
//}
for(int i=0;i<n;i++)
{
if(nums[i]==97){sc[0]++;}
if(nums[i]==98){sc[1]++;}
if(nums[i]==99){sc[2]++;}
if(nums[i]==100){sc[3]++;}
if(nums[i]==101){sc[4]++;}
if(nums[i]==102){sc[5]++;}
if(nums[i]==103){sc[6]++;}
if(nums[i]==104){sc[7]++;}
if(nums[i]==105){sc[8]++;}
if(nums[i]==106){sc[9]++;}
if(nums[i]==107){sc[10]++;}
if(nums[i]==108){sc[11]++;}
if(nums[i]==109){sc[12]++;}
if(nums[i]==110){sc[13]++;}
if(nums[i]==111){sc[14]++;}
if(nums[i]==112){sc[15]++;}
if(nums[i]==113){sc[16]++;}
if(nums[i]==114){sc[17]++;}
if(nums[i]==115){sc[18]++;}
if(nums[i]==116){sc[19]++;}
if(nums[i]==117){sc[20]++;}
if(nums[i]==118){sc[21]++;}
if(nums[i]==119){sc[22]++;}
if(nums[i]==120){sc[23]++;}
if(nums[i]==121){sc[24]++;}
if(nums[i]==122){sc[25]++;}
}
int[] sc1 = new int[26];
for(int i=0;i<26;i++)
{
sc1[i]=sc[i];
}
for(int i=0;i<26-1;i++)
{
if(sc1[i]>sc1[i+1]){
temp=sc1[i];
sc1[i]=sc1[i+1];
sc1[i+1]=temp;}
}
int num = sc1[25];
//System.out.println(num);
//int num = Math.max(sc);
int z = 0;
for(int i=0;i<26;i++)
{
if(sc[i]==num){
z=i;
break;
}
}
System.out.println((char)(z+96+1)); //强制转换,将ASCII码z+96+1的int转换为char
//if(z==0){System.out.println('a');}
//if(z==1){System.out.println('b');}
//if(z==2){System.out.println('c');}
//if(z==3){System.out.println('d');}
//if(z==4){System.out.println('e');}
//if(z==5){System.out.println('f');}
//if(z==6){System.out.println('g');}
//if(z==7){System.out.println('h');}
//if(z==8){System.out.println('i');}
//if(z==9){System.out.println('j');}
//if(z==10){System.out.println('k');}
//if(z==11){System.out.println('l');}
//if(z==12){System.out.println('m');}
//if(z==13){System.out.println('n');}
//if(z==14){System.out.println('o');}
//if(z==15){System.out.println('p');}
//if(z==16){System.out.println('q');}
//if(z==17){System.out.println('r');}
//if(z==18){System.out.println('s');}
//if(z==19){System.out.println('t');}
//if(z==20){System.out.println('u');}
//if(z==21){System.out.println('v');}
//if(z==22){System.out.println('w');}
//if(z==23){System.out.println('x');}
//if(z==24){System.out.println('y');}
//if(z==25){System.out.println('z');}
System.out.println(sc[z]);
scan.close();
}
}
int转char:
一种是自动转换,如char c = 97,会自动的将int类型的97转换成char的‘a’
另一种是强制类型转换,如char c = (char) 97,char的值也是‘a’
改进解法:使用哈希法
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
数组就是简单的哈希表,但是数组的大小可不是无限开辟的
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
int[] sc = new int[26];
int[] sc1 = new int[26];
int temp = 0;
for(int i=0;i<s.length();i++) //从字符'a'到索引0的转换
{
sc[ (int)s.charAt(i)- 97 ]++; //先转化成int再减数字
//sc[ s.charAt(i)- 97 ]++;可以,字符减数字是数字(但最好类型一致)
//sc[ s[i]-'a' ]++;可以,两个字符相减是数字
//string的s[i]是C++才可以,java必须使用s.charAt[i]才能找到第i个字符
}
//sc1=sc; //这样会导致结果错误,sc1和sc共同指向原始的sc数组,
//那么改变sc1的同时也会改变sc,因此sc1[25]也就是sc[25]
//所以不管输入是多少,结果都会是i=25,输出字符z
for(int i=0;i<26;i++){
sc1[i]=sc[i];
}
for(int i=0;i<26-1;i++){
if(sc1[i]>sc1[i+1]){
temp=sc1[i];
sc1[i]=sc1[i+1];
sc1[i+1]=temp;
}
}
for(int i=0;i<26;i++)
{
if(sc[i]==sc1[25]){
System.out.println((char)(i+97));
System.out.println(sc1[25]);
break; //必须有break,不然不会跳出循环, System.out.println并不会结束程序
}
}
scan.close();
}
}
在取最大值部分还能改进,上述是通过重新定义一个一样的数组,通过冒泡排序获得最大值
我们如何在不影响原有顺序的情况下获得数组中的最大值(不使用Math.max(),并且Math.max不适用于数组)
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
int[] sc = new int[26];
int[] sc1 = new int[26];
int temp = 0;
for(int i=0;i<s.length();i++) //从字符'a'到索引0的转换
{
sc[ (int)s.charAt(i)- 97 ]++; //先转化成int再减数字
//sc[ s.charAt(i)- 97 ]++;可以,字符减数字是数字(但最好类型一致)
//sc[ s[i]-'a' ]++;可以,两个字符相减是数字
//string的s[i]是C++才可以,java必须使用s.charAt[i]才能找到第i个字符
}
//sc1=sc; //这样会导致结果错误,sc1和sc共同指向原始的sc数组,
//那么改变sc1的同时也会改变sc,因此sc1[25]也就是sc[25]
//所以不管输入是多少,结果都会是i=25,输出字符z
int max = sc[0];
for(int i=1;i<26;i++)
{
if(max<sc[i])
{
max=sc[i];
}
}
for(int i=0;i<26;i++)
{
if(sc[i]==max){
System.out.println((char)(i+97));
System.out.println(max);
break; //必须有break,不然不会跳出循环, System.out.println并不会结束程序
}
}
scan.close();
}
}