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

相关推荐
CodeClimb2 小时前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb1 天前
【华为OD-E卷-寻找密码 100分(python、java、c++、js、c)】
java·python·华为od
枫叶丹41 天前
【HarmonyOS之旅】HarmonyOS开发基础知识(三)
华为od·华为·华为云·harmonyos
CodeClimb2 天前
【华为OD-E卷-简单的自动曝光 100分(python、java、c++、js、c)】
java·python·华为od
CodeClimb2 天前
【华为OD-E卷-最左侧冗余覆盖子串 100分(python、java、c++、js、c)】
java·python·华为od
星海拾遗3 天前
华为OD --- TLV解码
华为od
arnold663 天前
华为OD E卷(100分)31-敏感字段加密
算法·华为od
CodeClimb3 天前
【华为OD-E卷-开心消消乐 100分(python、java、c++、js、c)】
java·python·华为od
CodeClimb3 天前
【华为OD-E卷-预订酒店 100分(python、java、c++、js、c)】
java·python·华为od
arnold663 天前
华为OD E卷(100分)25-整数对最小和
算法·华为od