【编程题目 |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`也相似。如果需要处理更复杂的相似关系,可能需要进一步扩展相似性检查逻辑。

相关推荐
哪 吒2 天前
华为OD机试 - 无重复字符的元素长度乘积的最大值(Python/JS/C/C++ 2024 C卷 100分)
javascript·python·华为od
哪 吒3 天前
华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)
java·开发语言·华为od·优先队列
DC妙妙屋6 天前
10.31.2024刷华为OD C题型
c语言·开发语言·华为od
TangKenny7 天前
计算堆栈中的剩余数字
java·算法·游戏·华为od·华为
A懿轩A11 天前
HarmonyOS Next API12最新版 端云一体化开发-云函数篇
华为od·华为·华为云·harmonyos·鸿蒙·dev
Chrikk11 天前
华为odC++一面-面经总结
开发语言·c++·华为od
哪 吒17 天前
华为OD机试E卷——2024真题目录
算法·华为od·七日集训
点亮~黑夜19 天前
【OD】【E卷】【真题】【100分】光伏场地建设规划(Python&Java&javaScript&C++&C)
java·c语言·javascript·c++·python·华为od·真题
Amor风信子20 天前
华为OD机试真题---生成哈夫曼树
java·开发语言·数据结构·算法·华为od
DC妙妙屋20 天前
10.15.2024刷华为OD C题型(二)
c语言·开发语言·华为od