Trie巧妙解决前后缀问题,3045. 统计前后缀下标对 II

目录

一、题目

1、题目描述

2、接口描述

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解

​Python3

c++


一、题目

1、题目描述

给你一个下标从 0 开始的字符串数组 words 。

定义一个 布尔 函数 isPrefixAndSuffix ,它接受两个字符串参数 str1 和 str2 :

  • 当 str1 同时是 str2 的前缀(

    prefix

    )和后缀(

    suffix

    )时,isPrefixAndSuffix(str1, str2) 返回 true,否则返回 false

例如,isPrefixAndSuffix("aba", "ababa") 返回 true,因为 "aba" 既是 "ababa" 的前缀,也是 "ababa" 的后缀,但是 isPrefixAndSuffix("abc", "abcd") 返回 false

以整数形式,返回满足 i < j 且 isPrefixAndSuffix(words[i], words[j]) 为 true 的下标对 (i, j) 的 数量 

2、接口描述

class Solution {
public:long long countPrefixSuffixPairs(vector<string>& words) {}
};

3、原题链接

3045. 统计前后缀下标对 II


二、解题报告

1、思路分析

之前在周赛题解中用了kmp+字典树解法,但其实我们可以利用前后缀的特点只用一棵字典树完成求解

对于一个字符串我们可以将其与逆序字符串组合为一个pair列表:
<s[0], s[n - 1]>、<s[1], s[n - 2]>……<s[n - 1], s[0]>

然后用字典树存储pair列表,这样查询的时候就按照<s[0], s[n - 1]>、<s[1], s[n - 2]>……<s[n - 1], s[0]>往下查询,查询了前缀的同时又查询了后缀

python3中我们可以直接用字典映射pair,C++的话由于小写字母可以映射到0~25,所以我们把两个数字的二进制拼接作为映射key即可

2、复杂度

时间复杂度: O(nm)空间复杂度:O(nm)

3、代码详解

​Python3
class node:__slot__ = 'ch', 'cnt'def __init__(self):self.ch = dict()self.cnt = 0
class Solution:def countPrefixSuffixPairs(self, words: List[str]) -> int:ret = 0root = node()for s in words:cur = rootfor p in zip(s, s[::-1]):if p not in cur.ch:cur.ch[p] = node()cur = cur.ch[p]ret += cur.cntcur.cnt += 1return ret
c++
struct node{unordered_map<int, node*> ch;int cnt = 0;
};
class Solution {
public:long long countPrefixSuffixPairs(vector<string>& words) {node* root = new node;long long ret = 0;for(string & s : words){node* cur = root;for(int i = 0, n = s.size(); i < n; i++){int k = (int)(s[i] - 'a') << 5 | (int)(s[n - i - 1] - 'a');if(!cur->ch.count(k)) cur->ch[k] = new node;cur = cur->ch[k];ret += cur->cnt;}cur->cnt++;}return ret;}
};

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

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

相关文章

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies&#xff1a;依赖 依赖范围

java-ssm-jsp-大学生互动交流网站设计与实现

java-ssm-jsp-大学生互动交流网站设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

STM32基础--构建自己的固件库

CMSIS 标准及库层次关系 因为基于 Cortex 系列芯片采用的内核都是相同的&#xff0c;区别主要为核外的片上外设的差异&#xff0c;这些差异却导致软件在同内核&#xff0c;不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性问题&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件&#xff0c;用于根据指定日期范围创建日期滑动选择器。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

L2----最长公共前缀(2024年3月8日)

1.编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;strs [“dog”,“race…

java及特性的简单介绍

简介&#xff1a; 印度尼西亚有一个盛产咖啡的岛屿java&#xff0c;中文名翻译为爪哇&#xff0c;给这种新语言起码java 寓意端上一杯热咖啡。 特性&#xff1a; 1.面向对象 2.与平台无关 3.稳定安全 4.多线程 面向对象 1.面向对象语言关注的是对象&#xff0c;而不关注过程 2…

代码随想录算法训练营第35天—动态规划03 | ● *343. 整数拆分 ● *96.不同的二叉搜索树

*343. 整数拆分 https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Mg411q7YJ 考点 动态规划 我的思路 无思路 视频讲解关键点总结 怎么想到动态规划的&#xff1f;一个数可以拆成两个数&a…

【万题详解】P1048 [NOIP2005 普及组] 采药

题目描述 链接——题目在这里&#xff01;&#xff01;&#xff01; 辰辰是个天资聪颖的孩子&#xff0c;他的梦想是成为世界上最伟大的医师。为此&#xff0c;他想拜附近最有威望的医师为师。医师为了判断他的资质&#xff0c;给他出了一个难题。医师把他带到一个到处都是草…

Redis缓存穿透-缓存雪崩-缓存击穿

什么叫缓存穿透? 模拟一个场景: 前端用户发送请求获取数据,后端首先会在缓存Redis中查询,如果能查到数据,则直接返回.如果缓存中查不到数据,则要去数据库查询,如果数据库有,将数据保存到Redis缓存中并且返回用户数据.如果数据库没有则返回null; 这个缓存穿透的问题就是这个…

uboot分区介绍

RK平台的U-Boot支持两种分区表 RK paramter格式&#xff08;旧&#xff09;和 标准GPT格式&#xff08;新&#xff09;&#xff0c;当机器上同时存在 两种分区表时&#xff0c;优先使用GPT分区表。无论是 GPT 还是 RK parameter&#xff0c;烧写用的分区表文件都叫parameter.t…

linux安装todesk

xunilToDesk远程桌面软件-免费安全流畅的远程连接电脑手机ToDesk远程控制软件是一款稳定流畅的远程控制电脑手机连接软件,可远程桌面办公,远程协助运维.采用端对端加密,让每一次远程访问都安全可靠。https://www.todesk.com/linux.htmlToDesk远程控制软件是一款稳定流畅的远程控…

设备监察系统(Facilities Monitoring System)详解

设备监察系统&#xff08;Facilities Monitoring System&#xff0c;简称FMS&#xff09;是一个综合性的设施管理系统&#xff0c;主要用于监控、管理和优化各种设备、系统和设施的性能。这个系统可以应用于各种行业&#xff0c;如建筑、制造业、能源、交通等&#xff0c;以实现…

【考研数学】李林《880》vs 李永乐《660》完美使用搭配

没有说谁一定好&#xff0c;只有适不适合自身情况&#xff0c;针对自身弱点选择性价比才最高。 两者侧重点不同&#xff0c;660适合强化前期&#xff0c;弥补基础的不足&#xff0c;880适合强化后期&#xff0c;题型全面&#xff0c;提高我们对综合运用知识的能力。 选择习题…

蓝桥杯2023年-买瓜(dfs,类型转换同样耗时)

题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜&#xff0c;每个瓜的重量为 Ai 。 小蓝刀功了得&#xff0c;他可以把任何瓜劈成完全等重的两份&#xff0c;不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…

某IC交易网 js逆向解析学习【2024/03/7】更新

文章目录 文章目录 文章目录前言网址确定加密方式ICNet[sct] 加密查看bbc加密上半部分下半部分结果前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以留言发给我,一起学习共享学习路程 如侵权,联系我删除 …

计算机组成原理之机器:存储器之辅助存储器

计算机组成原理之机器&#xff1a;存储器之辅助存储器 笔记来源&#xff1a;哈尔滨工业大学计算机组成原理&#xff08;哈工大刘宏伟&#xff09; Chapter3&#xff1a;存储器之辅助存储器 3.1 概述 3.2 磁记录原理 通不同方向电流时磁化方向不同&#xff0c;由此区分写入…

BUUCTF:[MRCTF2020]ezmisc

题目地址&#xff1a;https://buuoj.cn/challenges#[MRCTF2020]ezmisc 下载附件打开是一张照片&#xff1a; 放到kali中发现crc校验错误&#xff0c;修改照片宽高&#xff1a; 保存即可发现flag flag为&#xff1a; flag{1ts_vEryyyyyy_ez!}

报错:ModuleNotFoundError: No module named ‘tensorrt’

写在前面 我安装了tensorRT,在运行它自带的模型都没问题。 但是在代码中import tensorrt就报错&#xff1a; ModuleNotFoundError: No module named ‘tensorrt’。 网上搜了一大堆&#xff0c;发现是没有在自己的python环境下安装。 所以特意写这篇文章记录一下。 在进行下一…

给你一个二叉树的根节点 root , 检查它是否轴对称。

我们可以实现这样一个递归函数&#xff0c;通过「同步移动」两个指针的方法来遍历这棵树&#xff0c;p 指针和 q指针一开始都指向这棵树的根&#xff0c;随后 p右移时&#xff0c;q 左移&#xff0c;p 左移时&#xff0c;q右移。每次检查当前 ppp 和 qqq 节点的值是否相等&…

PAT部分题目相关知识点——python

python中的整除 在Python中&#xff0c;整除&#xff08;也称为地板除&#xff09;可以使用**//**运算符来实现。当使用//运算符时&#xff0c;结果将是一个整数&#xff0c;它表示除法运算的整数部分&#xff0c;舍去任何小数部分。 示例&#xff1a; # 使用整除运算符 // …