知识图谱新词挖掘
题目描述
小华负责公司知识图谱产品,现在要通过新词挖掘完善知识图谱。
新词挖掘:给出一个待挖掘文本内容字符串content和一个词的字符串word,找到content中所有word的新词。
新词:使用词word的字符排列形成的字符串。
请帮小华实现新词挖掘,返回发现的新词的数量。
输入描述
第一行输入为待挖掘的文本内容content;
第二行输入为词word;
输出描述
在中找到的所有word的新词的数量。
备注
0≤content.length≤10000000;
1≤word.length≤2000
示例一
输入
qweebaewqd
qwe
输出
2
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); // 判断两个字符数组是否相等,从而判断两个字符串是否是字符排列相同的字符串
}
}