Leetcode3045. 统计前后缀下标对 II

news2025/1/24 5:13:23

Every day a Leetcode

题目来源:3045. 统计前后缀下标对 II

解法1:字典树

在这里插入图片描述

将这个列表哈希化:idx = (s[i] - ‘a’) * 26 + (s[j] - ‘a’)。

枚举 t=words[j],怎么统计有多少个 s=words[i] 是 t 的前缀?

这可以用字典树解决,在遍历 words 的同时,维护每个字符串的出现次数。当我们遍历 t 时,同时遍历字典树上的对应节点,并把 t 插入字典树。

代码:

/*
 * @lc app=leetcode.cn id=3045 lang=cpp
 *
 * [3045] 统计前后缀下标对 II
 */

// @lc code=start

// 字典树

class Solution
{
public:
    struct Trie
    {
        unordered_map<int, Trie *> childs;
        int cnt = 0;
    };
    Trie *trie = new Trie();
    void add(const string &s)
    {
        Trie *cur = trie;
        int n = s.size();
        for (int i = 0, j = n - 1; i < n; ++i, --j)
        {
            int idx = (s[i] - 'a') * 26 + (s[j] - 'a');
            if (!cur->childs.count(idx))
            {
                cur->childs[idx] = new Trie();
            }
            cur = cur->childs[idx];
            cur->cnt += 1;
        }
    }
    int query(const string &s)
    {
        Trie *cur = trie;
        int n = s.size();
        for (int i = 0, j = n - 1; i < n; ++i, --j)
        {
            int idx = (s[i] - 'a') * 26 + (s[j] - 'a');
            if (!cur->childs.count(idx))
                return 0;
            cur = cur->childs[idx];
        }
        return cur->cnt;
    }
    long long countPrefixSuffixPairs(vector<string> &words)
    {
        int n = words.size();
        long long ans = 0;
        for (int i = n - 1; i >= 0; --i)
        {
            ans += query(words[i]);
            add(words[i]);
        }
        return ans;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(L),其中 L 为所有 words[i] 的长度之和。

空间复杂度:O(L),其中 L 为所有 words[i] 的长度之和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1474551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中&#xff0c;修改应用程序的包名&#xff08;也称作Application ID&#xff09;涉及几个步骤&#xff0c;因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作&#xff1a; 1.Android Flutter工程中全局搜索替换包名 …

[Mac软件]Adobe Substance 3D Stager 2.1.4 3D场景搭建工具

应用介绍 Adobe Substance 3D Stager&#xff0c;您设备齐全的虚拟工作室。在这个直观的舞台工具中构建和组装 3D 场景。设置资产、材质、灯光和相机。导出和共享媒体&#xff0c;从图像到 Web 和 AR 体验。 处理您的最终图像 Substance 3D Stager 可让您在上下文中做出创造性…

Window10安装ruby

最好的方法&#xff0c;使用rubyinstaller&#xff0c;即在Downloads。 这是官方推荐的安装方式 通常来说我们会下载64位的 下载完后执行下载的exe即可。在最后一步会提示让安装gem&#xff0c;选则安装即可。 然后就可以在控制台进行测试了。

axios接口请求超时,重试方法

import axios from "axios"; import { Message } from "element-ui";const service axios.create({baseURL: xxxx,timeout: 2000,//超时时间retry: 3, //设置全局重试请求次数&#xff08;最多重试几次请求&#xff09;retryDelay: 1000, //设置全局请求间…

如何在有限的预算里做好服务器的DDOS防护?

在网络安全领域&#xff0c;防御分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一项持续且复杂的挑战。尤其对于预算有限的组织来说&#xff0c;如何在不牺牲安全性的前提下进行有效的防护&#xff0c;更是一个需要深思熟虑的问题。以下是一些建议&#xff0c;帮助你在有限…

459. 重复的子字符串(力扣LeetCode)

文章目录 459. 重复的子字符串题目描述暴力移动匹配 459. 重复的子字符串 题目描述 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “ab…

Android 15的新功能介绍

虽然谷歌已经发布了 Android 15 Preview 1&#xff0c;但这并不是完整的更新&#xff0c;因为该公司计划在后续的每月测试版中引入新功能。但这可能会让您思考&#xff0c;“Android 15 带来了哪些新功能&#xff1f;” 为了寻找答案&#xff0c;让我们深入了解 Android 15。 …

CSS3技巧37:JS+CSS3 制作旋转图片墙

开学了就好忙啊&#xff0c;Three.js 学习的进度很慢。。。 备课备课才是王道。 更一篇 JS CSS3 的内容&#xff0c;做一个图片墙。 其核心要点是把图片摆成这个样子&#xff1a; 看上去这个布局很复杂&#xff0c;其实很简单。其思路是&#xff1a; 所有图片放在一个 div.…

【小沐学QT】QT学习之OpenGL开发笔记

文章目录 1、简介2、Qt QOpenGLWidget gl函数3、Qt QOpenGLWidget qt函数4、Qt QOpenGLWindow5、Qt glut6、Qt glfw结语 1、简介 Qt提供了与OpenGL实现集成的支持&#xff0c;使开发人员有机会在更传统的用户界面的同时显示硬件加速的3D图形。 Qt有两种主要的UI开发方…

计算机网络:路由协议

路由协议简介 路由协议是计算机网络中不可或缺的一部分&#xff0c;它们负责确定数据包从源地址到目的地址的最佳路径。想象一下&#xff0c;如果你是一个数据包&#xff0c;路由协议就像是地图或导航工具&#xff0c;指导你如何到达目的地。 目录 路由协议简介 工作原理简化…

动态更新(LanqiaoOJ)

2024.2.27 前缀和、差分解析 前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)_前缀和差分-CSDN博客 k倍区间【暴力、前缀和】 输入描述 第一行包含两个整数 NN 和 KK( 1≤N,K≤1051≤N,K≤105 )。 以下 N 行每行包含一个整数 AiAi​ ( 1≤Ai≤1051≤Ai​≤105 ) 输…

【Java】常用实用类及java集合框架(实验六)

目录 一、实验目的 二、实验内容 三、实验小结 3.1 常用实用类 3.2 Java集合框架 一、实验目的 1、掌握java常用类的方法 2、掌握String类与数值类型数据的相互转化 3、掌握正则表达式的应用 4、掌握常用集合的创建和操作方法 二、实验内容 1、菜单的内容如下&#x…

CUDA C:核函数、主机函数、设备函数

相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 核函数(Kernel Function)指的是在主机(CPU)调用&#xff08;某些情况下也可以在设备调用&#xff09;&#xff0c;在设备(GPU)上执行的函数&#xff0c;使用__global__…

将法律条文很美观的复制到word上

前言 目前很多法律条款都没有现成的PDF或者word格式的供大家下载&#xff0c;这个时候呢&#xff0c;领导又要求你帮他搞定&#xff0c;这就很。。。。 步骤 复制全部条款到word中使用wps的排版功能&#xff0c;将空格和空段落全部移除 3. 设置好你需要的格式 标题&#xff…

PIGX从零开始快速构建分布式服务

PIGX从零开始快速构建分布式服务 一、环境搭建1.代码下载2 更改maven目录2更改完成后等待jar包的下载3 认真阅读README.md4 更改服务名5 编译代码 二、基础服务auth、upms、gateway配置与启动1 搭建数据库2 初始化pig数据库信息3构建nacos服务端3.1 更改pig-register配置并启动…

SQL注入漏洞解析--less-7

我们先看一下第七关 页面显示use outfile意思是利用文件上传来做 outfile是将检索到的数据&#xff0c;保存到服务器的文件内&#xff1a; 格式&#xff1a;select * into outfile "文件地址" 示例&#xff1a; mysql> select * into outfile f:/mysql/test/one f…

Mistral AI 推出最新Mistral Large模型,性能仅次于GPT 4

模型特点 • Mistral Large具有顶级的推理能力&#xff0c;适用于复杂的多语言推理任务&#xff0c;包括文本理解、转换和代码生成。• 32K 令牌的上下文窗口&#xff0c;能够从大型文档中精确回忆信息。• 精确的指令跟随能力&#xff0c;允许开发者设计他们的审核政策。• 支…

SpringCloud--Nacos解析

一、Nacos简介 Spring Cloud Alibaba Nacos是一个用于动态服务发现、配置管理和服务管理的平台&#xff0c;是阿里巴巴开源的一个项目&#xff0c;旨在简化微服务架构中的服务治理。Nacos 提供了一组简单易用的特性集&#xff0c;可以快速的实现动态服务发现、服务配置、服务元…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型&#xff0c;重量级性能&#xff0c;TinyLlama、LiteLlama小模型火起来了&#xff0c;针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型&#xff08;LLM&#xff09;参数规模达到百亿甚至千亿级别的同时&#xff0c;小巧且兼具高性能的小…

【基于React实现共享单车管理系统】—项目简介(一)

【基于React实现共享单车管理系统】—项目简介&#xff08;一&#xff09; 一、项目整体架构