2024-08-03:用go语言,给定一个从 0 开始的字符串数组 `words`, 我们定义一个名为 `isPrefixAndSuffix` 的布尔函数,该函数接受两个字符串参数 `str1` 和

news/2025/1/16 5:13:16/文章来源:https://www.cnblogs.com/moonfdd/p/18340866

2024-08-03:用go语言,给定一个从 0 开始的字符串数组 words

我们定义一个名为 isPrefixAndSuffix 的布尔函数,该函数接受两个字符串参数 str1str2

str1 同时是 str2 的前缀和后缀时,函数返回 true;否则返回 false

例如,isPrefixAndSuffix("aba", "ababa") 返回 true

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

我们的目标是以整数形式返回符合条件的下标对 (i, j) 的数量,

其中满足 i < jisPrefixAndSuffix(words[i], words[j])true

输入:words = ["a","aba","ababa","aa"]。

输出:4。

解释:在本示例中,计数的下标对包括:

i = 0 且 j = 1 ,因为 isPrefixAndSuffix("a", "aba") 为 true 。

i = 0 且 j = 2 ,因为 isPrefixAndSuffix("a", "ababa") 为 true 。

i = 0 且 j = 3 ,因为 isPrefixAndSuffix("a", "aa") 为 true 。

i = 1 且 j = 2 ,因为 isPrefixAndSuffix("aba", "ababa") 为 true 。

因此,答案是 4 。

答案2024-08-03:

chatgpt

题目来自leetcode3045。

大体步骤如下:

1 定义函数 isPrefixAndSuffix(str1, str2):实现一个函数,判断 str1 是否是 str2 的前缀和后缀。

  • 检查 str1 的长度是否大于 str2 的长度。如果是,直接返回 false

  • 确定 str2 的前缀是否与 str1 相同。

  • 确定 str2 的后缀是否与 str1 相同。

  • 如果上述两个条件都满足,返回 true;否则返回 false

2.遍历字符串数组 words

  • 使用两个嵌套循环,外层循环设定为 i,从 0 遍历到 len(words)-1,内层循环设定为 j,从 i+1 遍历到 len(words)-1。这样可以确保 i < j

3.调用 isPrefixAndSuffix 函数:在每对 (i, j) 中,调用 isPrefixAndSuffix(words[i], words[j])

  • 如果函数返回 true,则计数器增加 1。

4.返回计数器的值:最终,返回计数器的值,即为符合条件的下标对数量。

总时间复杂度

  • 外层循环走 n 次,内层循环从 i+1n,最坏情况下为 O(n)

  • 对于每一对 (i, j),调用 isPrefixAndSuffix 需要在 O(m) 时间内进行字符串的比较,其中 m 是前缀或后缀的长度。

  • 因此,总的时间复杂度为 O(n^2 * m),其中 m 是字符串的最长长度。

总额外空间复杂度

  • 本算法使用少量的额外空间来存储计数器和函数的一些局部变量,因此额外空间复杂度为 O(1)
  • 函数内部的字符串比较不需要额外的存储,仅使用常量空间来存储临时变量,主存储体在输入 words 中。

综上所述,时间复杂度为 O(n^2 * m),额外空间复杂度为 O(1)

Go完整代码如下:

在package mainimport ("fmt"
)func countPrefixSuffixPairs(words []string) (ans int64) {type pair struct{ x, y byte }type node struct {son map[pair]*nodecnt int}root := &node{son: map[pair]*node{}}for _, s := range words {cur := rootfor i := range s {p := pair{s[i], s[len(s)-1-i]}if cur.son[p] == nil {cur.son[p] = &node{son: map[pair]*node{}}}cur = cur.son[p]ans += int64(cur.cnt)}cur.cnt++}return
}func main() {words:=[]string{"a","aba","ababa","aa"}fmt.Println(countPrefixSuffixPairs(words))
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-class TrieNode:def __init__(self):self.children = {}self.count = 0def count_prefix_suffix_pairs(words):root = TrieNode()ans = 0for s in words:current = rootlength = len(s)for i in range(length):p = (s[i], s[length - 1 - i])  # 使用元组表示前缀和后缀字符对if p not in current.children:current.children[p] = TrieNode()current = current.children[p]ans += current.count  # 统计满足条件的对数current.count += 1  # 更新当前节点的计数return ansif __name__ == "__main__":words = ["a", "aba", "ababa", "aa"]print(count_prefix_suffix_pairs(words))

在这里插入图片描述

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

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

相关文章

AGC064B 题解

设红色的点值为 0,蓝色为 1。 注意到,如果有一条边的颜色和两端点同色,一定可以选。例子:选择和两端点同色的边。 又发现,如果存在一个 \(sz>1\) 的合法连通块,无论和其他点怎么连,原来的这个连通块内的点一定合法。 有注意到形如 \(0\xleftrightarrow 10,1\xleftrig…

Java源码:泡泡堂

学习java朋友们,福利来了,今天小编给大家带来了一款泡泡堂源码。此源码仅供学习使用!! 源码搭建和讲解 代码简介包名称类描述com.whh.frame MyJFrame.java 显示窗体、绑定监听、启动线程com.whh.frame MyJPanel.java 不断读取人物信息com.whh.main GameStart.java 游戏入口…

24暑假集训day5上午

图论 差分约束 有 \(𝑛\) 个整数变量 \(𝑥_1∼𝑥_𝑛\)。 给定一些形如 \(𝑥_𝑖+𝑐≥𝑥_𝑗\) 的限制。问有没有可行解,如有输出方案。 例如 \(𝑥_1−1≥𝑥_2,𝑥_2≥𝑥_3,𝑥_3≥𝑥_1\) 就无解。 在单源最短路问题中,如果存在一条 \(𝑖→𝑗\)…

24暑假集训day4上午下午

基础图论 图的存储方式 无向边可以拆成两条有向边 1. 邻接矩阵 邻接矩阵:若 \(𝑖→𝑗\) 存在有向边,则令矩阵 \(𝐴[𝑖][𝑗]=1\)。 遍历一个点的所有出边是 \(𝑂(𝑛)\) 的。 空间复杂度 \(𝑂(𝑛^2 )\)。 总结:复杂度太高,尽量不使用 bool hasEdge[MAXN][M…

微客在线客服系统-连接一切客户

嘿,朋友们,我是微客客服,一个全能的在线客服小能手。今天,我要给大家秀一秀我的超能力——多渠道对接! 想象一下,你的企业就像一个繁忙的交通枢纽,客户咨询就像来来往往的车辆,而我,就是那个指挥交通的智能信号灯。我能帮你把客户咨询引导到正确的地方,让一切沟通都井…

Overleaf中插入pdf图片只显示图片路径的解决方式

最近在用Overleaf写一篇论文,使用IEEE的LaTex模板时发现一个问题,我使用pdfLaTex编译器无法正确显示我插入的pdf图片,网上翻解决方式没有翻到,误打误撞解决了这个问题,问题如下图所示: 即只在图片区域显示路径,不显示图片本身,解决方案是: 在右侧设置里找到编译模式,…

RHCSA 考试试题解析

1.登录测试机初始化 red bule主机 rht-vmctl reset red rht-vmctl reset blue

MySQL的执行计划详解(Explain)(整合版)

目录MySQL的执行计划详解(Explain)(整合版)1、MySQL执行计划的定义2、Explain分析示例3、语法展示4、explain中的列4.1、id4.2、select_type4.3、table4.4、type(重要的)4.5、possible_keys4.6、key4.7、key_len4.8、ref4.9、rows4.10、fitered4.11、Extra MySQL的执行计划详…

ArkTS #01# 组件通信

一、通过Prop单向传递/* * 单双向绑定都有 * 父组件@State,子组件@Link,孙组件@Prop * 数据流向:父组件 <--> 子组件 --> 孙组件*/@Entry @Component export struct BothBinding {@State fatherValue: number = 0//表示组件中的状态变量,这个状态变化会引起 UI 变…

风风影视安装使用

风风影视安装使用教程 一 安装软件下载风风影视 下载好后安装即可。二 配置地址1.点击设置 2.点击配置地址 3.将这串地址复制粘贴,点击确认https://gitee.com/ffddoz/tvbox1/raw/master/fantaiyingff.json到这步就可以使用了以下是功能介绍,非必须看点击主页之后,会有很多选…

idea=services启动类变成灰色了

idea启动大于5个services的时候就会让新启动的变成灰色,并且重启idea之后在services里找不到相关启动类(还要重新翻) 下面版本适用于2023.2.1+(老版本设置页在Advanced Settings中,略有不同) File----->Settings----->Advanced Settings----->Run/Debug,设置完…

常回家看看之tcachebin-attack

常回家看看之tcachebin-attack 自从glibc2.26之后出现了新的堆管理机制,及引用了tcachebin机制,tcachebin也是主要分配小堆块的,有40条bin链(0x10 - 0x410) 那么这样的分配有很多和smallbin 和fastbin重叠的部分,及malloc申请之后free掉的小堆块优先进入tcachebin中,这样…