英文输入法
作者: 更新: 3/27/2025 字数: 0 字 时长: 0 分钟
题目描述
主管期望你来实现英文输入法单词联想功能。
需求描述:
依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列
如果联想不到,请输出用户输入的单词前缀
注意:
英文单词联想时,区分大小写
缩略形式如”don’t”,判定为两个单词,”don”和”t”
输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号
解题思路
给定一个字符串 s 和一个前缀字符串 pre,需要从字符串 s 中提取所有以 pre 开头的单词:
- 按非字母字符分割字符串,提取单词。
- 去重并按字典序排序单词。
- 找出所有以 pre 开头的单词并返回,多个单词以空格分隔。
- 如果没有找到符合条件的单词,则返回 pre 本身。
代码实现
javascript
const readline = require('readline');
// 创建读取标准输入的接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let s, t; // 用于存储输入的字符串和前缀
let inputCount = 0; // 记录输入的行数
// 监听每行输入
rl.on('line', (input) => {
if (inputCount === 0) {
s = input; // 第一行作为原始字符串 s
} else if (inputCount === 1) {
t = input; // 第二行作为前缀 t
getResult(s, t); // 调用 getResult 函数处理结果
rl.close(); // 关闭输入接口
}
inputCount++;
});
/**
* 处理并输出以指定前缀开头的单词列表
* @param {string} s 原始字符串
* @param {string} t 前缀字符串
*/
function getResult(s, t) {
// 按非字母字符分割字符串,提取单词
let s1 = s.split(/[^a-zA-Z]/);
// 去重
let s2 = [...new Set(s1)];
// 按字典序排序
s2.sort();
// 过滤出以 t 开头的单词
s2 = s2.filter(x => x.startsWith(t));
// 如果有符合条件的单词,打印结果;否则打印前缀 t
if (s2.length > 0) {
console.log(s2.join(' ')); // 以空格分隔打印结果
} else {
console.log(t); // 打印前缀 t
}
}