2023 小红书笔试题 0819

笔试时间:2023年8月19日 秋招

第一题

题目:小红背单词

小红每天都要背单词,然后她会把每天记住了多少单词记录下来,并在小红书上打卡。当小红背单词时,如果她已经记住了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记录已经背过的单词,已经背过的单词不计入。

C++:

#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    cin.ignore(); // Ignore the newline character after reading n

    vector<string> s(n);
    for (int i = 0; i < n; i++) {
        getline(cin, s[i]);
    }

    unordered_map<string, int> map;
    unordered_set<string> set;
    int ans = 0;

    for (int i = 0; i < n; i++) {
        if (set.count(s[i]) > 0) continue;
        map[s[i]]++;
        if (map[s[i]] > ans) {
            ans++;
            set.insert(s[i]);
        }
    }

    cout << ans << endl;
    return 0;
}

Java:

import java.util.*;

public class Main11111 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] s = new String[n];
        sc.nextLine();
        for(int i = 0; i < n; i++){
            s[i] = sc.nextLine();
        }
        HashMap<String, Integer> map = new HashMap<>();
        HashSet<String> set = new HashSet<>();
        int ans = 0;
        for(int i = 0; i < n; i++){
            if(set.contains(s[i]))continue;
            map.put(s[i], map.getOrDefault(s[i],0) + 1);
            if(map.get(s[i]) > ans){
                ans++;
                set.add(s[i]);
            }
        }
        System.out.println(ans);
    }
}

Python:

n = int(input())
s = []
for _ in range(n):
    s.append(input())

map = {}
set = set()
ans = 0

for i in range(n):
    if s[i] in set:
        continue
    map[s[i]] = map.get(s[i], 0) + 1
    if map[s[i]] > ans:
        ans += 1
        set.add(s[i])

print(ans)

第二题

题目:小红的回文串

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

-拆分。把’w'拆成2个’v',’m’拆成 2个'n’。

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

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

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

输入描述

第一行输入一个整数 T(1<=T<=10^4)表示询问次数

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

所有字符串长度之和不超过 10^5。

输出描述

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

样例输入

5

Wovv

bod

pdd

moom

lalalai

样例输出

YES

YES

YES

YES

NO

参考题解

使用一个StringBuilder转换字符串s,如果为bdqp,统一转换为b。

如果为w,转为vv 如果为n,转为u 如果为m,转为uu

C++:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    cin.ignore(); // Ignore the newline character after reading n

    vector<string> s(n);
    for (int i = 0; i < n; i++) {
        getline(cin, s[i]);
    }

    vector<string> ans(n, "NO");
    int index = 0;

    for (string str : s) {
        string s1 = "";
        for (char c : str) {
            if (c == 'b' || c == 'd' || c == 'q' || c == 'p') {
                s1 += 'b';
            } else if (c == 'w') {
                s1 += "vv";
            } else if (c == 'm') {
                s1 += "uu";
            } else if (c == 'n') {
                s1 += 'u';
            } else {
                s1 += c;
            }
        }

        int i = 0, j = s1.length() - 1;
        bool flag = true;

        while (i < j) {
            if (s1[i] != s1[j]) {
                flag = false;
            }
            i++;
            j--;
        }

        if (flag) {
            ans[index] = "YES";
        }
        index++;
    }

    for (string x : ans) {
        cout << x << endl;
    }

    return 0;
}

Java:

import java.util.Arrays;

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

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

评论
1
2
分享

创作者周榜

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