题目描述
主管期望你来实现英文输入法单词联想功能。
需求如下:
- 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,
- 如果联想不到,请输出用户输入的单词前缀。
注意:
- 英文单词联想时,区分大小写
- 缩略形式如”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”, 从已输入信息中无法联想到任何符合要求的单词, 因此输出用户输入的单词前缀。 |
Python算法源码
import re
sentence = input()
prefix = input()
sentence = re.sub(r'[^\w\s]', ' ', sentence) # 将标点符号替换为空格
word_set = set(sentence.split()) # 存储单词的集合,自动去重且按照字典序排序
ans = ''
for word in sorted(word_set): # 遍历单词集合
if word.startswith(prefix): # 如果单词以前缀开头
ans += word + ' ' # 将单词加入答案字符串
if ans: # 如果答案字符串不为空
print(ans) # 输出单词序列
else:
print(prefix) # 否则输出前缀
C语言算法源码
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char sentence[1000];
char prefix[100];
// 读取输入的句子和前缀
fgets(sentence, sizeof(sentence), stdin);
fgets(prefix, sizeof(prefix), stdin);
// 去除标点符号,将其替换为空格
for (int i = 0; i < strlen(sentence); i++) {
if (!isalnum(sentence[i]) && !isspace(sentence[i])) {
sentence[i] = ' ';
}
}
// 存储单词的集合,自动去重且按照字典序排序
char wordSet[100][100];
int count = 0;
char *ptr = strtok(sentence, " ");
while (ptr != NULL) {
strcpy(wordSet[count], ptr);
count++;
ptr = strtok(NULL, " ");
}
// 检查前缀并输出结果
int flag = 0;
for (int i = 0; i < count; i++) {
if (strncmp(wordSet[i], prefix, strlen(prefix)) == 0) {
printf("%s ", wordSet[i]);
flag = 1;
}
}
if (!flag) {
printf("%s", prefix);
}
return 0;
}
Java算法源码
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入的句子和前缀
String sentence = scanner.nextLine();
String prefix = scanner.nextLine();
// 去除标点符号,将其替换为空格
sentence = sentence.replaceAll("[^\\w\\s]", " ");
// 存储单词的集合,自动去重且按照字典序排序
Set<String> wordSet = new HashSet<>(Arrays.asList(sentence.split(" ")));
// 检查前缀并输出结果
StringBuilder ans = new StringBuilder();
for (String word : wordSet) {
if (word.startsWith(prefix.trim())) {
ans.append(word).append(" ");
}
}
if (ans.length() > 0) {
System.out.println(ans.toString().trim());
} else {
System.out.println(prefix.trim());
}
scanner.close();
}
}
3 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]