【小红书真题】0819秋招笔试真题1、2

1、小红背单词

小红每天都要背单词,然后她会把每天记住了多少单词记录下来,并在小红书上打卡。当小红背单词时,如果她已经记住了 i 个单词,且背了一个没有记住的新单词 i+1 次,则她就会记住这个新单词。

例如,当她按顺序背 [“you“、“thank”、“thank”] 时,她第一次背单词 “you” 时她就能记住 “you”。而由于她已经记住了一个单词,所以需要背两次 “thank” 才能记住 "thank”。现在你知道了小红背单词的顺序,请你求出小红今天记住了多少个单词。

输入描述:
第一行一个整数 n(1<=n<=10000)。接下来 n 行,每行一个字符串,保证每个字符串长度不超过 10。

输出描述:
输出一个整数,表示她记住了多少个单词。

样例输入:

5
you
thank
queue
queue
thank

样例输出

2

提示:

小红先记住了单词"you”,又因为背了两次"queue"于是记住了单词"queue”,由于已经记住了两个单词,所以背两次"thank"还不能让小红记住。

题解——模拟

HashMap记录每个单词的记的次数,同时用Set记录已经背过的单词,已经背过的单词不计入

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、小红的回文串

小红有一个字符串,她可以进行以下操作:

  • 拆分。把 ‘w’ 拆成 2 个 ‘v’,‘m’ 拆成 2个 ‘n’。

  • 轴堆成。把 ‘b’ 轴对称成 ‘d’,‘p’ 轴对称成 ‘q’,反之亦然。

  • 翻转。把 ‘b’ 反转成 ‘q’,把 ‘d’ 翻转成 ‘p’,把 ‘n’ 翻转成 ‘u’

经过若干次操作,小红想知道这个字符串能不能变成回文串。

输入描述:
第一行输入一个整数 T(1<=T<= 1 0 4 10^4 104)表示询问次数
接下来 T 行,每行输入一个字符串表示询问。
所有字符串长度之和不超过 1 0 5 10^5 105

输出描述:
输出 T 行,每行输出 “YES” 或 “NO” 表示是否可以变成回文串。

样例输入:

5
Wovv
bod
pdd
moom
lalalai

样例输出

YES
YES
YES
YES
NO

题解——模拟

变成回文串思路:

  • bdqp,统一转换为 b
  • w,转为 vv
  • n,转为 u
  • m,转为 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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44033208/article/details/132445876