笔试时间: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<>();
点赞 0
评论 0
全部评论

相关推荐

昨天 16:40
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21 文远知行笔试,半年多没刷算法题 ->挂 (后续HR说春招可以重新安排笔试)2026.2.4     小鹏汇天 技术一面,第二周收到结果 ->挂2026.2.12   大众Cariad代招 技术二面 ->Offer2026.2.28   多益网络技术面试,由于风评太差,一直在犹豫要不要接面试 ->推迟-----------分割线-----------2026.3 月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6 从上家公司实习离职,氛围最好的一家公司,leader 说可以帮忙转正,但是流程太长,而且我们部门据说只有一个 hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9 入职新公司,大众Cariad 以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10 电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了 12 号晚上的机票回成都2026.3.15 参加国家电网计算机类笔试2026.3.17 电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18 收到电网面试通知,通知 3.22-3.25 这个时间去面试,我的岗位只招 1 个人。据说面试只有 2-3 人,不知道能不能成功----------分割线-----------2026.3.21 电网面试结束,感觉回答的还勉勉强强,大概是2个岗位分别招1个人,一共11人面试,实际来了9人2026.3.27 出面试成绩,满分100分,早上10:20左右发现面试成绩46,我震惊了,没截图,后面过了十分钟重新看发现面试成绩给我改成58了。但同样震惊。朋友问我是不是把面试官打了,哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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