首页 > 其他分享 >字典树-2416. 字符串的前缀分数和

字典树-2416. 字符串的前缀分数和

时间:2022-09-22 22:22:37浏览次数:71  
标签:ab curr 前缀 words 2416 字符串 word 字典

问题描述

给你一个长度为 n 的数组 words ,该数组由 非空 字符串组成。
定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。
例如,如果 words = ["a", "ab", "abc", "cab"] ,那么 "ab" 的分数是 2 ,因为 "ab" 是 "ab" 和 "abc" 的一个前缀。
返回一个长度为 n 的数组 answer ,其中 answer[i] 是 words[i] 的每个非空前缀的分数 总和 。
注意:字符串视作它自身的一个前缀。

示例 1:
输入:words = ["abc","ab","bc","b"]
输出:[5,4,3,2]
解释:对应每个字符串的答案如下:

  • "abc" 有 3 个前缀:"a"、"ab" 和 "abc" 。
  • 2 个字符串的前缀为 "a" ,2 个字符串的前缀为 "ab" ,1 个字符串的前缀为 "abc" 。
    总计 answer[0] = 2 + 2 + 1 = 5 。
  • "ab" 有 2 个前缀:"a" 和 "ab" 。
  • 2 个字符串的前缀为 "a" ,2 个字符串的前缀为 "ab" 。
    总计 answer[1] = 2 + 2 = 4 。
  • "bc" 有 2 个前缀:"b" 和 "bc" 。
  • 2 个字符串的前缀为 "b" ,1 个字符串的前缀为 "bc" 。
    总计 answer[2] = 2 + 1 = 3 。
  • "b" 有 1 个前缀:"b"。
  • 2 个字符串的前缀为 "b" 。
    总计 answer[3] = 2 。

示例 2:
输入:words = ["abcd"]
输出:[4]
解释:
"abcd" 有 4 个前缀 "a"、"ab"、"abc" 和 "abcd"。
每个前缀的分数都是 1 ,总计 answer[0] = 1 + 1 + 1 + 1 = 4 。
 
提示:
1 <= words.length <= 1000
1 <= words[i].length <= 1000
words[i] 由小写英文字母组成

问题求解

class Solution:
    def sumPrefixScores(self, words: List[str]) -> List[int]:
        class TrieNode:
            def __init__(self):
                self.next = defaultdict(TrieNode)
                self.cnt = 0

        root = TrieNode()
        for i, word in enumerate(words):
            curr = root
            for c in word:
                curr = curr.next[c]
                curr.cnt += 1
        
        def dfs(word):
            res = 0
            curr = root
            for c in word:
                curr = curr.next[c]
                res += curr.cnt
            return res

        res = []
        for word in words:
            res.append(dfs(word))
        
        return res

标签:ab,curr,前缀,words,2416,字符串,word,字典
From: https://www.cnblogs.com/hyserendipity/p/16721055.html

相关文章

  • 洛谷 P1114 “非常男女”计划 (前缀和)
    https://www.luogu.com.cn/problem/P1114题目大意:给定一排数字,让我们求出最大的区间内1和0的个数相等时的区间长度。输入9010001100输出6输入10011......
  • 复习元组列表字典
    元组能存储多个不同类型的数据,且是有序的。但它是不可变的,因此不能进行修改、删除或添加元素的操作。列表和元组非常相似,唯一的不同是列表的元素是可以修改的。字典的元素......
  • 字典
    字典-定义:在Python中,将两种数据关联在一起形成一个元素,由多个这样的元素组成的数据类型称为字典,又称为dict。字典中的元素是不考虑排列顺序的。组成字典元素(item)的两个......
  • Python在字典中通过键名查找键值
    deffind(target,dict_data):""":paramtarget:需要查找的键名:paramdict_data:需要查找的列表:return:如果找到就返回对应键名的键值,否则提示没......
  • 字典增删改查
    #字典Dict,也称为mapping字典是可变的、无序的、key不重复的key-value键值对集合初始化:dict(**kwargs)使用name=value对初始化一个字典dict(iterable,**kwarg),使用可迭代......
  • 22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值
    22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值一、基本概念在本篇文章当中主要跟大家介绍以下几点前缀、中缀和后缀表达式。如何将中缀表达式转化成后缀表......
  • 洛谷真题字典树
    P8306【模板】字典树1#include<bits/stdc++.h>2usingnamespacestd;3intt,n,q;4constintmaxn=3000005;5chars[maxn];6intson[maxn][80],cnt[ma......
  • 如何编写一个函数来查找字符串数组中的最长公共前缀,说明:所有输入只包含小写字母a~z ,如
      先新建一个类,因为我们肯定要在类里面写,在main方法里调用(为求好理解这里我用的默认名,请勿纠结)     首先我们要想到函数中的字符串最好是要用户自行输入......
  • Day_1(并查集朋友圈、字典序排序)
    1.并查集朋友圈:找出最多的一个圈子内有多少用户!id[](表示当前节点的父节点)nodeNum[](表示当前节点为根的那一组节点数量)importjava.util.Scanner;//并查集class......
  • python数据类型之字典Dictionary
    1.python字典字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过......