题目描述
主管期望你来实现英文输入法单词联想功能。
需求如下:
- 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,
- 如果联想不到,请输出用户输入的单词前缀。
注意:
- 英文单词联想时,区分大小写
- 缩略形式如”don’t”,判定为两个单词,”don”和”t”
- 输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号
输入描述
输入为两行。
首行输入一段由英文单词word和标点符号组成的语句str;
接下来一行为一个英文单词前缀pre。
- 0 < word.length() <= 20
- 0 < str.length <= 10000
- 0 < pre <= 20
输出描述
输出符合要求的单词序列或单词前缀,存在多个时,单词之间以单个空格分割
用例
输入 | I love you He |
输出 | He |
说明 |
从用户已输入英文语句”I love you”中提炼出“I”、“love”、“you”三个单词,接下来用户输入“He”, 从已输入信息中无法联想到任何符合要求的单词,因此输出用户输入的单词前缀。 |
输入 |
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 |
说明 | 从用户已输入英文语句”The furthestdistance in the world, Is not between life and death, But when I stand in frontof you, Yet you dont know that I love you.”中提炼出的单词,符合“f”作为前缀的,有“furthest”和“front”,按字典序排序并在单词间添加空格后输出,结果为“front furthest”。 |
题目解析
简单的逻辑题,应该是主要考察数组去重,数组字典排序,过滤等知识
JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const lines = [];
rl.on("line", (line) => {
lines.push(line);
if (lines.length === 2) {
const str = lines[0];
const pre = lines[1];
console.log(lenovo(str, pre));
lines.length = 0;
}
});
function lenovo(str, pre) {
const cache = [...new Set(str.split(/[^a-zA-z]/))];
const res = cache.filter((ele) => ele.startsWith(pre)).sort();
if (res.length === 0) return pre;
return res.join(" ");
}
Java算法源码
import java.util.Collections;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String pre = sc.nextLine();
System.out.println(getResult(str, pre));
}
public static String getResult(String str, String pre) {
String[] tmp = str.split("[^a-zA-Z]");
TreeSet<String> cache = new TreeSet<>();
Collections.addAll(cache, tmp);
StringJoiner sj = new StringJoiner(" ");
cache.stream().filter(s -> s.startsWith(pre)).forEach(s -> sj.add(s));
String ans = sj.toString();
if (ans.length() > 0) {
return ans;
} else {
return pre;
}
}
}
Python算法源码
import re
# 输入获取
s = input()
pre = input()
# 算法入口
def getResult(s, pre):
tmp = re.split("[^a-zA-Z]", s)
cache = list(set(tmp))
cache.sort()
cache = list(filter(lambda x: x.startswith(pre), cache))
if len(cache) > 0:
return " ".join(cache)
else:
return pre
# 算法调用
print(getResult(s, pre))
免责声明:
1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文
评论0