Índice
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);
}
}
}