[Perguntas reais do Pequeno Livro Vermelho] 0819 Teste Escrito de Recrutamento de Outono, Perguntas Reais 1 e 2

1. Pequenas palavras vermelhas

Xiaohong tem que memorizar palavras todos os dias e então registrará quantas palavras memorizou a cada dia e verificará no livrinho vermelho. Quando Xiaohong memoriza palavras, se ela memorizou i palavras e memorizou uma nova palavra i+1 vezes que não memorizou, ela memorizará a nova palavra.

Por exemplo, quando ela memorizou ["você", "obrigado", "obrigado"] em sequência, ela conseguiu se lembrar de "você" na primeira vez que memorizou a palavra "você". E como ela já memorizou uma palavra, ela precisa recitar “obrigado” duas vezes para lembrar “obrigado”. Agora que você sabe a ordem das palavras de Xiaohong, descubra quantas palavras Xiaohong memorizou hoje.

Descrição de entrada:
A primeira linha é um número inteiro n (1<=n<=10000). Nas próximas n linhas, cada linha possui uma string e o comprimento de cada string é garantido como não superior a 10.

Descrição de saída:
produz um número inteiro indicando quantas palavras ela lembrou.

Exemplo de entrada:

5
you
thank
queue
queue
thank

saída de amostra

2

dica:

Xiaohong primeiro memorizou a palavra “você” e, como memorizou “fila” duas vezes, memorizou a palavra “fila”.

Solução - Simulação

HashMap registra o número de tempos de memorização de cada palavra e usa Set para registrar as palavras que foram memorizadas, e as palavras que foram memorizadas não são contadas

import java.util.*;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        String[] s = new String[n];
        in.nextLine();
        for(int i = 0; i < n; i++){
    
    
            s[i] = in.nextLine();
        }

        //HashMap记录每个单词的次数
        HashMap<String, Integer> map = new HashMap<>();
        //Set记录已经背过的单词,已经背过的单词不计入
        HashSet<String> set = new HashSet<>();

        int sum = 0;
        for(int i = 0; i < n; i++){
    
    
            //已经背过的单词不计入
            if(set.contains(s[i])){
    
    
                continue;
            }

            //HashMap记录每个单词的次数
            map.put(s[i], map.getOrDefault(s[i],0) + 1);

            //当前记的单词数大于该背的单词数了,记为背过
            if(map.get(s[i]) > sum){
    
    
                sum++;
                set.add(s[i]);
            }
        }

        //System.out.println(map);
        //System.out.println(set);
        System.out.println(sum);
    }
}

2. Palíndromo de Xiaohong

Xiaohong tem uma string, ela pode realizar as seguintes operações:

  • dividir. Divida 'w' em 2 'v', 'm' em 2 'n'.

  • Machados empilhados. Torne 'b' axissimétrico a 'd', 'p' axissimétrico a 'q' e vice-versa.

  • Virar. Inverta 'b' para 'q', 'd' para 'p' e 'n' para 'u'

Após várias operações, Xiaohong quer saber se essa corda pode ser transformada em palíndromo.

Descrição de entrada:
Insira um número inteiro T na primeira linha (1<=T<= 1 0 4 10^41 04 ) Indica o número de consultas
Nas próximas T linhas, insira uma sequência de caracteres em cada linha para indicar consultas.
A soma de todos os comprimentos de string não excede1 0 5 10^51 05

Descrição da saída:
produz T linhas, e cada linha produz "SIM" ou "NÃO" para indicar se pode ser transformada em um palíndromo.

Exemplo de entrada:

5
Wovv
bod
pdd
moom
lalalai

saída de amostra

YES
YES
YES
YES
NO

Solução - Simulação

Em uma linha de pensamento palíndromo:

  • bdqp, convertido uniformemente em b
  • w, vá para vv
  • n, para você
  • m, convertido para uu
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String[] s = new String[n];
        in.nextLine();
        for (int i = 0; i < n; i++) {
    
    
            s[i] = in.nextLine();
        }

        String[] ans = new String[n];
        Arrays.fill(ans, "NO");


        int index = 0;
        for (String str : s) {
    
    

            //使用一个StringBuilder转换字符串s
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
    
    
                char c = str.charAt(i);
                // 如果为bdqp,统一转换为b
                if (c == 'b' || c == 'd' || c == 'q' || c == 'p') {
    
    
                    sb.append('b');
                }
                // 如果为w,转为vv
                else if (c == 'w') {
    
    
                    sb.append('v').append('v');
                }
                // 如果为n,转为u
                else if (c == 'n') {
    
    
                    sb.append('u');
                }
                // 如果为m,转为uu
                else if (c == 'm') {
    
    
                    sb.append('u').append('u');
                }
                else {
    
    
                    sb.append(c);
                }
            }

            String s1 = sb.toString();
            //对每一个字符串首尾开始遍历判断是否回文串
            int i = 0, j = s1.length() - 1;
            boolean flag = true;
            while (i < j) {
    
    
                if (s1.charAt(i) != s1.charAt(j)) {
    
    
                    flag = false;
                }
                i++;
                j--;
            }
            if (flag) {
    
    
                ans[index] = "YES";
            }
            index++;
        }

        //输出结果
        for (String x : ans) {
    
    
            System.out.println(x);
        }
    }
}

Acho que você gosta

Origin blog.csdn.net/qq_44033208/article/details/132445876
Recomendado
Clasificación