2023 蚂蚁笔试题 0905
笔试时间:2023年9月5日 秋招
第一题
题目:小红判断相等
小红现在有一个长度为n的字符串s和长度为n的数组 a,如果满足对于ai = aj,都有si = sj,并对于ai != aj,都有si != sj,则字符串和数组相等,请你告诉小红她的字符串和数组是否相等。
输入描述
一行一个整数t,表示有t组数据,对于每组数据:一行一个整数n,表示字符串和数组的长度;一行一个数组a,表示小红的数组;一行一个字符串s,表示小红的字符串,字符串只包含小写字母。
1<= t <= 100
1 <= n <= 1000
1 <= ai <= 50
输出描述
如果字符串和数组相等,输出”YES”,否则输出“NO"。
样例输入
2
3
1 2 2
acc
4
1 2 3 4
abcc
样例输出
YES
NO
参考题解
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
bool check(const std::vector<int>& u, const std::vector<int>& v) {
std::unordered_map<int, std::vector<int>> g;
for (int i = 0; i < v.size(); ++i) {
g[v[i]].push_back(i);
}
for (const auto& entry : g) {
std::unordered_set<int> st;
for (int x : entry.second) {
st.insert(u[x]);
}
if (st.size() > 1) {
return false;
}
}
return true;
}
int main() {
int T;
std::cin >> T;
for (int t = 0; t < T; ++t) {
int n;
std::cin >> n;
std::vector<int> a(n);
for (int i = 0; i < n; ++i) {
std::cin >> a[i];
}
std::string s;
std::cin >> s;
if (check(std::vector<int>(s.begin(), s.end()), a) && check(a, std::vector<int>(s.begin(), s.end()))) {
std::cout << "YES" << std::endl;
} else {
std::cout << "NO" << std::endl;
}
}
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.*;
public class Main {
public static boolean check(List<Integer> u, List<Integer> v) {
Map<Integer, List<Integer>> g = new HashMap<>();
for (int i = 0; i < v.size(); i++) {
int x = v.get(i);
if (!g.containsKey(x)) {
g.put(x, new ArrayList<>());
}
g.get(x).add(i);
}
for (List<Integer> vertices : g.values()) {
Set<Integer> st = new HashSet<>();
for (int x : vertices) {
st.add(u.get(x));
}
if (st.size() > 1) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
scanner.nextLine(); // Consume newline
for (int t = 0; t < T; t++) {
scanner.nextLine(); // Consume input line
String[] aInput = scanner.nextLine().split(" ");
List<Integer> a = new ArrayList<>();
for (String num : aInput) {
a.add(Integer.parseInt(num));
}
String s = scanner.nextLine();
List<Integer> sList = new ArrayList<>();
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023 秋招笔试题汇总解析 文章被收录于专栏
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

查看5道真题和解析