Artículos de la serie de la Copa Blue Bridge
Directorio de artículos
análisis de palabras
- Tema Descripción
Xiaolan está aprendiendo un idioma mágico. Las palabras en este idioma están todas compuestas de letras minúsculas en inglés, y algunas palabras son muy largas, superando con creces la longitud de las palabras normales en inglés. Xiaolan no podía recordar algunas palabras después de estudiar durante mucho tiempo. Planeaba no memorizar estas palabras por completo, sino distinguir las palabras según la letra que aparecía más en la palabra.
Ahora, por favor ayuda a Xiaolan. Después de dar una palabra, ayúdalo a encontrar la letra que aparece más y la cantidad de veces que aparece esta letra.
- ingrese la descripción
Ingrese una línea que contenga una palabra, y la palabra solo se compone de letras minúsculas en inglés.
Para todos los casos de evaluación, la longitud de la palabra de entrada no supera los 1000.
- descripción de salida
Salida de dos líneas, la primera línea contiene una letra en inglés, que indica qué letra aparece con más frecuencia en la palabra. Si hay varias letras con el mismo número de ocurrencias, imprima la que tenga el orden lexicográfico más pequeño.
La segunda línea contiene un número entero que representa el número de ocurrencias de la letra más frecuente en la palabra.
- Muestras de entrada y salida
ingresar
lanqiao
producción
un 2
ingresar
largolargolargolargo
producción
6
_
Idea 1 Usa hábilmente el código ASCII de 26 letras minúsculas
Use una matriz de enteros para "almacenar" 26 letras minúsculas, y los subíndices 0-26 corresponden a la az respectivamente. Esta matriz se puede usar para almacenar el número de ocurrencias de cada letra minúscula, y se ha organizado en el orden del diccionario, simplemente recorra de adelante hacia atrás, el primer valor más grande corresponde a la letra más frecuente.
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String str=scan.next();
int[] a=new int[26]; //记录26个小写字母出现次数
for(int i=0;i<26;i++) {
//下标0-26对应26个小写字母,元素值对应该字母出现次数
a[str.charAt(i)-'a']++;
}
int max=0; //记录最多的出现次数
char moreChar='a'; //记录出现次数最多的字母
for(int i=0;i<26;i++) {
if(a[i]>max) {
moreChar=(char)('a'+i);
max=a[i];
}
}
System.out.println(moreChar);
System.out.println(max);
scan.close();
}
}
Idea 2 Estadísticas violentas + clasificación HashMap
Use un bucle for de doble capa para contar el número de ocurrencias de cada letra, guárdelo en el hashMap y luego conviértalo en una Lista, y use Collection.sort() para ordenar por valor. es la letra con más ocurrencias y su número.
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String str=scan.next();
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<str.length();i++){
int count=0; //记录每个字母出现次数
for(int j=0;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
count++;
}
int maxCount=0; //出现最多的次数
char moreChar; //出现次数最多的字母
if(count>=maxCount) {
moreChar=str.charAt(i);
}
map.put(str.charAt(i),count); //将每个字母及其出现的次数存入map
}
//按value排序
List<Map.Entry<Character,Integer>> list=new ArrayList(map.entrySet());//转换为List
Collections.sort(list,(o1,o2)->(o2.getValue().compareTo(o1.getValue())));//排序
// System.out.println("排序前:"+map);
// System.out.println("排序后:"+list);
//取出list第一项,即为出现次数最多的字母及其次数
System.out.println(list.get(0).getKey());
System.out.println(list.get(0).getValue());
scan.close();
}
}
Resumir
¡Bienvenido a corregirme si hay errores!