华为OD机试-新词挖掘-2022Q4 A卷-Py/Java/JS

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

备注
0 ≤ content的长度 ≤10000000。

1 ≤ word的长度≤2000。

示例1:

输入
qweebaewqd
qwe

输出
2

说明
起始索引等于0的子串是“qwe”,它是word的新词起始索引等于6的子串是“ewg”,它是word的新词

示例2:

输入

abab
ab

输出
3

说明
起始索引等于0的子串是”ab“它是word的新词它是word的新词起始索引等于1的子串是”ba“起始索引等于2的子串是”ab“,它是word的新词

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
import java.util.stream.Stream;
 
class Main {
	public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        String content = in.nextLine();
        String word = in.nextLine();
        System.out.println(contin(content, word));
	}
 
    public static int contin(String content, String word){
        if(content.length() < word.length())
            return 0;
        if(word.length() == 0)
            return 0;
        HashMap content_map = new HashMap();
        HashMap word_map = new HashMap();
        //先统计出word中的字符组成
        for (int i=0;i= word.length()){
                int left = right - word.length();
                if (word_map.containsKey(content_arr[left]) && word_map.get(content_arr[left]) == content_map.get(content_arr[left]))
                    content_child_char_kind -=1 ;
                content_map.put(content_arr[left], content_map.getOrDefault(content_arr[left], 0) - 1);
                    
            }
            
            content_map.put(content_arr[right], content_map.getOrDefault(content_arr[right], 0) + 1);
            if (word_map.containsKey(content_arr[right]) && word_map.get(content_arr[right]) == content_map.get(content_arr[right]))
                content_child_char_kind+=1;
            right+=1;
            if (content_child_char_kind == word_char_kind) {
                result += 1;
            }
        }
        return result;
    }
 
 
}

Python代码

import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
 
def contin(content, word):
    if(len(content) < len(word)):
        return 0
    if(len(word) == 0):
        return 0
    content_map = {}
    word_map = {}
    #先统计出word中的字符组成
    for ch in word:
        if ch in word_map:
            word_map[ch] += 1
        else:
            word_map[ch] = 1
 
    word_char_kind = len(word_map.keys())
    right = 0
    content_child_char_kind = 0
    result = 0
    while(right < len(content)):
        if(right >= len(word)):
            left = right - len(word)
            if content[left] in word_map and content_map[content[left]] == word_map[content[left]]:		
                content_child_char_kind -= 1
            content_map[content[left]] -= 1
        if content[right] in content_map:
            content_map[content[right]] += 1
        else:
            content_map[content[right]] = 1
 
        if content[right] in word_map and content_map[content[right]] == word_map[content[right]]:
            content_child_char_kind+=1
        right += 1
        if (content_child_char_kind == word_char_kind):
            result += 1
 
    return result
 
 
#处理输入
content = input()
word = input()
 
print(contin(content, word))
 

JS代码

function main(content, word){
    if ((content.length < word.length) || (word.length=0)) {
        console.log(0)
        return
    }
 
    let content_map = {}
    let word_map = {}
    //先统计出word中的字符组成
    for (let i=0;i= word.length){
            left = right - word.length
            if (content[left] in word_map && content_map[content[left]] == word_map[content[left]]) {		
                content_child_char_kind -= 1
            }
            content_map[content[left]] -= 1
        }
        if (content[right] in content_map) {
            content_map[content[right]] += 1
        }
        else{
            content_map[content[right]] = 1
        }
 
        if (content[right] in word_map && content_map[content[right]] == word_map[content[right]]){
            content_child_char_kind+=1
        }
        right += 1
        if (content_child_char_kind == word_char_kind){
            result += 1
        }
    }
    console.log(result)
}
 
main("qweebaewqd","qwe")

你可能感兴趣的:(java,javascript,华为)