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

相关推荐
塔中妖6 天前
【华为OD】分割数组的最大差值
数据结构·算法·华为od
塔中妖7 天前
【华为OD】数字游戏
算法·游戏·华为od
熊文豪8 天前
【华为OD】找出通过车辆最多颜色
算法·华为od
塔中妖8 天前
【华为OD】环中最长子串2
算法·华为od
熊文豪8 天前
【华为OD】区块链文件转储系统
算法·华为od·区块链
塔中妖8 天前
【华为OD】Linux发行版的数量
linux·算法·华为od
熊文豪8 天前
【华为OD】阿里巴巴找黄金宝箱
算法·华为od
塔中妖8 天前
【华为OD】5G网络建设
网络·5g·华为od
塔中妖8 天前
【华为OD】查找接口成功率最优时间段
算法·链表·华为od
塔中妖9 天前
【华为OD】最大子矩阵和
算法·华为od·矩阵