8.19 小红书笔试面经 - 编程题 & 题解

考试平台: 赛码 alt

T1

题目描述

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

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

输入描述

第一行一个整数n(1sns10000)。 接下来n行,每行一个字符串,保证每个字等超长度不超过 10。

输出描述

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

示例

输入

5

you

chank

queue

queue

thank

输出

2

提示

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

题解

简单模拟题

import java.util.*;

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

        // 存储已经记住的单词
        Set<String> mem = new HashSet<>();
        // 记录单词背诵次数
        Map<String, Integer> cntMap = new HashMap<>();
        for (int i = 0; i < n; i++) {
            String word = in.nextLine();
            // 已经记住不再重复记
            if (mem.contains(word)) {
                continue;
            } else {
                int cnt = cntMap.getOrDefault(word, 0) + 1;
                // 记住单词 word
                if (cnt > mem.size()) {
                    mem.add(word);
                } else {
                    cntMap.put(word, cnt);
                }
            }
        }

        System.out.println(mem.size());
    }
}

T2 小红的回文串

题目描述

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

  • 拆分。把 'w' 拆成2个 'v','m' 拆成 2个 'n'。
  • 轴对称,把 'b' 轴对称成 ’d','p' 轴对称成 'q',反之亦然。
  • 翻转。把 b' 翻转成 q',把 ’d’ 翻转成 'p',把'n’ 翻转成 'u',反之亦然。

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

输入描述

第一行输入一个整数T(1 ≤ T ≤ )表示询问次数。

接下来T行,每行输入一个字符串表示询问。

所有字符串长度之和不超过

输出描述

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

示例

输入

5
wovv
bod
pdd
moom
lalalai

输出

YES 
YES 
YES 
YES 
NO

提示说明

第一个字符串可以变成:vvovv(将第一个w拆成两个v)

第二个字符串可以变成:bob、dod、pop或qoq

第三个字符串可以变成:bdb

第四个字符串本来就是回文的,不用进行操作。

题解

通过双指针去判断是否回文, 特别需要注意条件比较多特别容易遗漏。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

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

        Solution solution = new Solution();
        for (int i = 0; i < n; i++) {
            System.out.println(solution.solve(in.nextLine()) ? "YES" : "NO");
        }
    }
}


class Solution {
    static Set<Character>[] eqSet = new HashSet[2];
    static Set<String> mEqSet;

    static {
        // 字符等价的集合
        eqSet[0] = new HashSet<>(Arrays.asList('b', 'd', 'q', 'p'));
        eqSet[1] = new HashSet<>(Arrays.asList('n', 'u'));

        // 特别容易遗漏, m 拆-> nn,  n 和 u 翻转。
        mEqSet = new HashSet<>(Arrays.asList("nn", "uu", "nu", "un"

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

🔥笔试编程真题宝典💯 文章被收录于专栏

📕分享大厂机试真题深度剖析核心考点,助你速通面试。

全部评论

相关推荐

点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
9
22
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务