Prueba real de Blue Bridge Cup: análisis de palabras (implementación de Java)

Artículos de la serie de la Copa Blue Bridge

2023 14.º Concurso de simulación de la Copa Blue Bridge 2.ª fase Soluciones de problemas personales (implementación de Java)

2023 14th Blue Bridge Cup Simulation Competition Fase 3 Soluciones de problemas individuales (Implementación de Java)



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!

Supongo que te gusta

Origin blog.csdn.net/weixin_51627036/article/details/129461463
Recomendado
Clasificación