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秋招各大笔试题汇总,c++,java,python多种语言分析,解答。