携程笔试题(含答案)

本文分享了两道算法题目的解答,包括合成词展开和数组碰撞问题。在合成词展开中,介绍了如何根据前缀和后缀展开单词;在数组碰撞问题中,将题目转化为背包问题,求解最小结果。每个问题都提供了解题思路和样例解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结不易,如果对你有帮助,请点赞关注支持一下
微信搜索程序dunk,关注公众号,获取博客源码、数据结构与算法笔记、面试笔试题

合成词展开(AC)

时间限制: 3000MS
内存限制: 589824KB

题目描述:

苏克·冯·望杜是印度著名的人工智能科学家。你正在试着阅读他的文章。但望杜写文章有个习惯,就是喜欢自己造词。他会利用现有的单词拼接上英语的一些前缀和后缀来快速造出一些新词。有些新词的组合十分复杂,读上去让人头大。作为程序员的你,很自然的想到可以写段代码把这些复杂的单词展开成词组以便理解。

已知的单词前缀和对应的含义有:

anti<word>: against <word>

post<word>: after <word>

pre<word>: before <word>

re<word>: <word> again

un<word>: not <word>

已知的单词后缀和对应的含义有:

<word>er: one who <word>s

<word>ing: to actively <word>

<word>ize: change into <word>

<word>tion: the process of <word>ing

<word>ful: full of <word>

注意:后缀与原单词的关系更加紧密,所以需要最后展开。如果同时存在多个前缀和后缀,应以原单词为中心,前缀从右到左、后缀从左到右依次展开。举个例子,unmodelize 的展开顺序如下:

unmodelize

not modelize

not change into model

虽然以上定义不是完全准确,但阅读起来不影响理解。

输入描述

输入信息为一个待展开的单词,所有字母均为小写,不含空格

输出描述

按照题意进行展开后的单词

样例输入

unmodelize

样例输出

not change into model

方法一

这道题写了整整1个小时20分钟

先处理前缀,再处理后缀:写的时候思路特别乱,一开始只通过了91%,提示TLE了然后改啊改啊,终于AC了

public class Main {
   


    /*请完成下面这个函数,实现题目要求的功能
    当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
    ******************************开始写代码******************************/

    static Map<String, String> preMap;
    static Map<String, String> postMap;
    static String worder;
    static String unwangdulize(String word) {
   
        preMap = new HashMap<>();
        postMap = new HashMap<>();
        preMap.put("anti", "against word");
        preMap.put("post", "after word");
        preMap.put("pre", "before word");
        preMap.put("un", "not word");
        preMap.put("re", "word again");
        postMap.put("re", "one who words");
        postMap.put("gni", "to actively word");
        postMap.put("ezi", "change into word");
        postMap.put("noit", "the process of wording");
        postMap.put("luf", "full of word");
        worder = word;
        String preWord = prefix(worder);
        String nowWord = worder;
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值