华为OD机试E卷 - 英文输入法(100分)

英文输入法单词联想功能

一、问题描述

主管期望实现英文输入法单词联想功能。依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,则输出用户输入的单词前缀。

注意事项

  1. 英文单词联想时,区分大小写。
  2. 缩略形式如“don’t”,判定为两个单词,“don”和“t”。
  3. 输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号。

二、输入描述

输入为两行:

  1. 首行输入一段由英文单词 word 和标点符号组成的语句 str。
  2. 接下来一行为一个英文单词前缀 pre。

约束条件:

  • 0 < word.length ≤ 20。
  • 0 < str.length ≤ 1000。
  • 0 < pre ≤ 20。

三、输出描述

输出符合要求的单词序列或单词前缀,存在多个时,单词之间以单个空格分割。

四、示例

示例1

输入

I love you
He

输出:He 说明:从用户已输入英文语句“I love you”中提炼出“I”、“love”、“you”三个单词,接下来用户输入“He”,从已输入信息中无法联想到任何符合要求的单词,因此输出用户输入的单词前缀。

示例2

输入

The furthest distance in the world, Is not between life and death, But when I stand in front of you, Yet you don't know that I love you.
f

输出:front furthest 说明:从用户已输入英文语句中提炼出的单词,符合“f”作为前缀的有“furthest”和“front”,按字典序排序并在单词间添加空格后输出,结果为“front furthest”。



        function solution(input) {
            const [str, pre] = input.split('\n')
            if(!pre?.length) return ''
            const wordList = str.split('\'').reduce((total, cur)=> {
                // const s = cur.replace(/^[a-zA-Z ]/g, '')
                const words = cur.replace(/[^a-zA-Z\s]/g, '').split(' ')
                for (const w of words) {
                    if(!total.includes(w)) total.push(w)
                }

                return total
            }, [])
            const res = wordList.filter(f=> f.substring(0, pre.length) === pre)
            console.log(res , '--------------', str);
            return res?.length ? res.sort((a, b)=> a.localeCompare(b)).join(' ') : pre
        }
        
        function main() {
            // 示例1
            console.log(solution("I love you\nHe") === "He");
            
            // 示例2
            console.log(solution("The furthest distance in the world, Is not between life and death, But when I stand in front of you, Yet you don't know that I love you.\nf") === "front furthest");
            
            // 示例3
            console.log(solution("Hello world\nH") === "Hello");
            
            // 示例4:包含标点符号和缩略形式
            console.log(solution("I can't believe it's not butter!\nb") === "believe butter");
            
            // 示例5:只有cherry符合
            console.log(solution("apple banana cherry date\nc") === "cherry");

            // 示例6:空字符串
            console.log(solution("\n") === "");

            // 示例7:前缀为空字符串
            console.log(solution("apple banana cherry date\n") === "");

            // 示例8:前缀为大写字母
            console.log(solution("Apple Banana Cherry Date\nC") === "Cherry");

            // 示例9:前缀为小写字母,但单词中有大写字母
            console.log(solution("Apple Banana Cherry Date\nc") === "c");

            // 示例10:前缀为多个字母,且有多个匹配
            console.log(solution("apple banana cherry date\ncher") === "cherry");

            // 示例11:前缀为多个字母,且有多个匹配,按字典序排序
            console.log(solution("apple banana cherry date\na") === "apple");

            // 示例12:前缀为多个字母,且有多个匹配,按字典序排序
            console.log(solution("apple banana cherry date\nb") === "banana");

            // 示例13:前缀为多个字母,且有多个匹配,按字典序排序
            console.log(solution("apple banana cherry date\nd") === "date");

            // 示例14:前缀为多个字母,且有多个匹配,按字典序排序
            console.log(solution("apple banana cherry date\nch") === "cherry");

            // 示例15:前缀为多个字母,且有多个匹配,按字典序排序
            console.log(solution("apple banana cherry date\ndat") === "date");
        }
        
        main();
#华为OD机试E卷##华为od##华为od机试题库##华为OD机试真题##算法真题#
【华为OD机试】真题E卷 文章被收录于专栏

重要:2024年8月-2025年2月考的都是OD统一考试(E卷),题库已经整理好了,命中率95%以上。

全部评论

相关推荐

1 2 评论
分享
牛客网
牛客企业服务