华为OD机试E卷 - 英文输入法(100分)
英文输入法单词联想功能
一、问题描述
主管期望实现英文输入法单词联想功能。依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,则输出用户输入的单词前缀。
注意事项:
- 英文单词联想时,区分大小写。
- 缩略形式如“don’t”,判定为两个单词,“don”和“t”。
- 输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号。
二、输入描述
输入为两行:
- 首行输入一段由英文单词 word 和标点符号组成的语句 str。
- 接下来一行为一个英文单词前缀 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%以上。