华为OD2023(A卷)基础题34【新词挖掘】

该文章介绍了一个用于知识图谱新词挖掘的算法,通过遍历文本内容中的子串并检查它们是否由给定词的字符重新排列形成,来找出新词。算法包括滑动窗口遍历、字符数组排序和比较两个字符串是否为变位词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识图谱新词挖掘 
题目描述
小华负责公司知识图谱产品,现在要通过新词挖掘完善知识图谱。
新词挖掘:给出一个待挖掘文本内容字符串content和一个词的字符串word,找到content中所有word的新词。
新词:使用词word的字符排列形成的字符串。
请帮小华实现新词挖掘,返回发现的新词的数量。

输入描述
第一行输入为待挖掘的文本内容content;
第二行输入为词word;

输出描述
在中找到的所有word的新词的数量。

备注
0≤content.length≤10000000;
1≤word.length≤2000

示例一
输入

qweebaewqd

qwe

输出

import java.util.*;

public class OdAb34 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String content = scanner.nextLine(); // 输入待挖掘的文本内容
        String word = scanner.nextLine(); // 输入词
        int count = findNewWords(content, word); // 调用 findNewWords 方法查找新词
        System.out.println(count); // 输出新词数量
    }

    private static int findNewWords(String content, String word) {
        int count = 0; // 初始化新词数量为 0
        int wordLen = word.length(); // 记录词的长度,方便后面使用
        for (int i = 0; i <= content.length() - wordLen; i++) { // 使用滑动窗口遍历所有长度为 wordLen 的子串
            String sub = content.substring(i, i + wordLen); // 取出当前子串
            if (isAnagram(sub, word)) { // 判断当前子串是否是 word 的字符排列形成的字符串
                    count++; // 新词数量加一
            }
        }
        return count; // 返回新词数量
    }

    private static boolean isAnagram(String s1, String s2) {
        char[] c1 = s1.toCharArray(); // 将字符串转换为字符数组
        char[] c2 = s2.toCharArray();
        Arrays.sort(c1); // 对字符数组进行排序
        Arrays.sort(c2);
        return Arrays.equals(c1, c2); // 判断两个字符数组是否相等,从而判断两个字符串是否是字符排列相同的字符串
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值