【编程题目 |100分】音乐小说内容重复识别【华为OD机试 2024 Q2考试题 C卷】

题目描述

【音乐小说内容重复识别】

实现一个简易的重复内容识别系统,通过给定的两个内容名称,和相似内容符号,判断两个内容是否相似;如果相似,返回相似内容;如果不相似,返回不相似的内容。

初始化:给出两个字符串,一些相似字符对,如顿号和逗号相似,的和de相似,猪和潴,给出两个字符串的相似判断结果

输入:两条语句,给出是否相似,对于相似的语句,返回True和相似的字符对;对于不相似的内容,则返回第一个内容的不相似信息,方便后续补充

注意:

相似关系是 具有 传递性的。例如,如果"顿号"和"逗号"是相似的,"逗号"和"分号"是相似的,则"顿号"和"逗号"是相似的。

为了过滤一些无意义的信息,这里***可以匹配任意长度的内容,例如:

给出相似对"(****)",""时,"异世邪君(人气玄幻作家)" 和 "异世邪君" 认为是相似,此时相似符号返回 *** 即可

不相似的内容,需要给出不相似的字符串,多处不相似的字符串用空格分隔

=========================================================================

基于题目描述和提供的代码片段,下面是一个完整的Java程序示例,实现了简易的音乐小说内容重复识别系统。这个程序将使用`Scanner`类来获取用户输入,并根据定义的相似字符对来判断两个字符串是否相似。

```java

import java.util.*;

public class MusicNovelContentChecker {

private Map<Character, Set<Character>> similarityPairs;

public MusicNovelContentChecker() {

similarityPairs = new HashMap<>();

// 初始化相似字符对

similarityPairs.put(',', new HashSet<>(Arrays.asList('、')));

similarityPairs.put('的', new HashSet<>(Arrays.asList('d', 'e')));

similarityPairs.put('猪', new HashSet<>(Arrays.asList('潴')));

// 这里可以继续添加其他相似字符对

}

public static boolean areSimilar(String content1, String content2, MusicNovelContentChecker checker) {

if (content1.equals(content2)) {

return true;

}

// 过滤掉书名后的括号和作者名

content1 = content1.replaceAll("\\(.*?\\)", "");

content2 = content2.replaceAll("\\(.*?\\)", "");

if (content1.length() != content2.length()) {

return false;

}

List<Character> nonSimilarChars = new ArrayList<>();

for (int i = 0; i < content1.length(); i++) {

char c1 = content1.charAt(i);

char c2 = content2.charAt(i);

if (!checker.isSimilar(c1, c2)) {

nonSimilarChars.add(c1);

}

}

if (nonSimilarChars.isEmpty()) {

return true;

} else {

// 输出不相似的字符

System.out.println("不相似的字符: " + String.join(" ", nonSimilarChars));

return false;

}

}

private boolean isSimilar(char c1, char c2) {

return similarityPairs.containsKey(c1) && similarityPairs.get(c1).contains(c2);

}

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

MusicNovelContentChecker checker = new MusicNovelContentChecker();

System.out.println("请输入第一个内容名称:");

String content1 = in.nextLine();

System.out.println("请输入第二个内容名称:");

String content2 = in.nextLine();

if (areSimilar(content1, content2, checker)) {

System.out.println("两个内容相似,True");

} else {

System.out.println("两个内容不相似,False");

}

in.close();

}

}

```

这个程序首先定义了一个`MusicNovelContentChecker`类,其中包含一个`similarityPairs`映射,用于存储相似字符对。`areSimilar`方法用于判断两个内容是否相似,同时过滤掉书名后的括号和作者名。如果两个内容相似,它将输出`True`;如果不相似,它将输出不相似的字符。

请注意,这个示例程序假设相似字符对是单向的,即如果`c1`和`c2`相似,`c2`和`c1`也相似。如果需要处理更复杂的相似关系,可能需要进一步扩展相似性检查逻辑。

相关推荐
我不会起名字呀3 天前
在 C 语言中使用 UT_hash_handle 简化实现哈希表
c语言·链表·华为od
哪 吒3 天前
华为OD机试(D卷+C卷+A卷+B卷)2024真题目录(全、新、准)
华为od·c卷·a卷·b卷·d卷
KK爱Coding8 天前
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特殊加密算法(200分) - 三语言AC题解(Python/Java/Cpp)
java·c语言·开发语言·python·华为od
Casual_Lei8 天前
华为od-C卷200分题目3 - 两个字符串间的最短路径问题
java·华为od
哪 吒8 天前
华为OD机试 - 石头剪刀布游戏(Java 2024 D卷 200分)
java·游戏·华为od
颜淡慕潇9 天前
【华为OD机试|01】最远足迹(Java/C/Py/JS)
java·python·算法·华为od·c#·算法刷题·华为od机试真题
盘门12 天前
华为OD机考(HJ16 购物单)
java·算法·华为od
Casual_Lei12 天前
华为od-C卷200分题目2 - 找城市
c语言·开发语言·华为od
KK爱Coding13 天前
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的巡演(100分) - 三语言AC题解(Python/Java/Cpp)
java·c语言·开发语言·python·华为od