回文对

LeetCode回文问题总结,回文子串,回文子序列等 1. LeetCode 5. 最长回文子串(求长度) 传送门 题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 假设字符串s的长度为length,建立一个length*length的矩阵dp。令 dp[i][j] 表示 S[i] 至 S[j] 所表示的子串是否是回文子串。 当 i == j,dp[i][j] 是回文子串(单字符都是回文子串); 当 j - 阅读详情

目录

 

题目

思路

代码


题目

给定一组互不相同的单词,找出所有不同的索引对(i, j),使得列表中的两个单词,words[i] + words[j],可拼接成回文串。

示例 1:

输入:["abcd","dcba","lls","s","sssll"]
输出:[[0,1],[1,0],[3,2],[2,4]] 
解释:可拼接成的回文串为 ["dcbaabcd","abcddcba","slls","llssssll"]
示例 2:

输入:["bat","tab","cat"]
输出:[[0,1],[1,0]] 
解释:可拼接成的回文串为 ["battab","tabbat"]

同样是在力扣上刷到的题目,原题链接:回文对-力扣

思路

采用“暴力法”当然可解,但由于要遍历每一对字符串,需花费O(n²)时间,每次遍历都要检查拼接成的新字符串是否是“回文串”,需花费O(m)的时间,所以总的时间复杂度为O(m*n²),试过了,通不过,超时。

看了官方题解,掌握了大致思路,对于可以拼凑成“回文串”的两个字符串s1、s2(s1在左,s2在右)总共以下三种情况:

  • s1的长度等于s2的长度,那么s1一定等于s2的翻转
  • s1的长度大于s2的长度,那么在s1的右边一定存在一个“回文串”,并且左边部分是s2的翻转
  • s1的长度小于s2的长度,那么在s2的左边一定存在一个“回文串”,并且右边部分是s1的翻转

2和3其实可以归为一种,在实际操作过程中,我们要频繁地判断某个字符串的翻转是否存在输入中,为了方便,我们建立一个字典来保存诸如:原字符串的翻转:对应的索引 这样的键值对。在判断某个字符串是否可以与其他字符串构成“回文对”时,我们只考虑这个字符串更长或者一样长的情况,它可以在左边也可以在右边,由于我们会遍历每一个字符串,所以这样并不会出现漏掉或者重复的情况。

代码

Python版本:

class Solution:
    def palindromePairs(self, words: List[str]) -> List[List[int]]:
        results = []
        words_dict = {word[::-1]:i for i, word in enumerate(words)}  # 存储翻转的字符串
        for i, word in enumerate(words):
            if word in words_dict:  # 长度相等
                if words_dict[word] != i:
                    results.append([i, words_dict[word]])
            n = len(word)
            for k in range(0, n):
                sub = word[k:]  # 在左边
                if sub == sub[::-1]:  # 判断是否回文
                    if word[:k] in words_dict:
                        if words_dict[word[:k]] != i:
                            results.append([i, words_dict[word[:k]]])
                sub = word[:k+1]  # 在右边
                if sub == sub[::-1]:
                    if word[k+1:] in words_dict:
                        if words_dict[word[k+1:]] != i:
                            results.append([words_dict[word[k+1:]], i])
        return results

分析时间复杂度:遍历每个字符串O(n),分割子串O(m),判断每个子串是否回文O(m),所以总的时间复杂度为O(n*m²)。

Cursor+Playwright MCP实现UI全自动化,告别繁琐元素定位! 摘要:本文探讨了利用Cursor和PlaywrightMCP实现UI自动化测试的创新方法。通过将AI编程助手与浏览器自动化技术结合,解决了传统UI自动化测试中元素定位繁琐、维护成本高等痛点。文章详细介绍了项目架构设计、AI使用技巧(包括精准提问和编写.mdc规则文档),以及如何实现自然语言测试用例到自动化脚本的转换。最终实现了测试人员只需输入手工测试步骤,AI即可自动生成完整测试代码的智能化流程,并展望了通过Excel表格一键生成测试用例的未来发展方向,为UI自动化测试提供了高效解决方案。 阅读详情

相关推荐

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

09 -- 回文对

回文对

JH_Cao的博客 539

基于BFQ19S的共射振荡器设计(克拉泼电容三点式)

根据理论,设计出如下LC振荡器: 一、设计初期是使用= 400Mhz作为目标值计算的, 但由于计算值与实际值有差别,所以使用计算值附近的元器件代替使用;最终该电路的L1=82nH , D1 = 5.6pF, C11=18pF, C12 = 18pF ; 另外R3= 600Ω, R4取27k , C9取10pF; 该电路实际的震荡频率为主要为L1,D1 决定,所以其震荡频率约为 == 235Mhz; 二、由于实际得到的频率比目标频率低太多,所以调整电路使其能达到400M左...

rzchong1988的专栏 3705

【算法】滑动窗口leetcode567

1.例题LeetCode567 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 1: 输入:s1 = “ab” s2 = “eidbaooo” 输出:true 解释:s2 包含 s1 的排列之一 (“ba”). 示例 2: 输入:s1= “ab” s2 = “eidboaoo” 输出:false 提示: 1 <= s1.length, s2.length &l

katherin_wanzi的博客 658

Hi3516CV610开发板实战:从零搭建智能视觉监控系统

本文详细介绍了从零开始基于Hi3516CV610开发板搭建智能视觉监控系统的完整实战流程。涵盖硬件连接、系统配置、摄像头集成、网络设置、固件烧录到视频处理与智能分析功能开发,提供了丰富的实践经验和调试技巧,帮助开发者快速掌握嵌入式视觉系统开发。

vvv99的博客 561

三相电机控制入门:端电压、相电压、线电压到底怎么测?(附实测波形对比)

本文为三相电机控制初学者提供了端电压、相电压和线电压的完整测量指南。通过厘清三者的物理定义与测量方法,详细讲解了如何搭建虚拟星形点电路,并对比分析了方波、SPWM和SVPWM三种主流控制模式下关键电压波形的核心特征与差异,帮助工程师掌握正确的示波器测量与波形解读技巧。

oauth7security的博客 650

python程序设计课后题(程春晖)_Python编程的课后问题(程春辉),python,程序设计,题程,春晖...

python课后题第一章1.八进制35的十进制值是A、 30B、 29C、19D、25正确答案: B2.Python语言的官方网站是A、 www.python.comB、 www.python.orgC、www.python.eduD、 pythonic.org正确答案: B3.Python程序的扩展名是A、 pyB、exeC、docxD、 jpg正确答案: A4.计算机系统由硬件和( )组成A...

weixin_39982452的博客 1万+

ITK-snap进行分割区域标注、三维显示及改变显示颜色

在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进

u010409517的博客 2万+

[C++] LeetCode 336. 回文对

题目 给定一组独特的单词, 找出在给定列表中不同 的索引对(i, j),使得关联的两个单词,例如:words[i] + words[j]形成回文。 示例 1: 给定words = ["bat", "tab", "cat"] 返回 [[0, 1], [1, 0]] 回文是["battab", "tabbat"] 示例 2: 给定 words = ["abcd", "d

沧海漂游的博客 1153

从微服务到 Agent 服务:架构思维的迁移

微服务的概念最早在2014年由Martin Fowler提出,核心是“将单体应用拆分为一组小的服务,每个服务运行在独立的进程中,服务之间采用轻量级的通信机制互相协作,每个服务围绕具体业务构建,并且可以独立部署到生产环境”。单一职责:每个微服务只负责一个业务领域的功能,比如订单服务只处理订单相关的逻辑,用户服务只处理用户相关的逻辑被动响应:微服务是“哑的”,只有收到外部请求的时候才会执行逻辑,本身没有主动决策的能力固定流程:微服务的逻辑是硬编码的,执行流程是提前定义好的,只能按照程序员写的代码处理请求。

AI智能探索者的博客 275

【RT-DETR创新改进】改进前必看!对Ultralytics调参, 1:1还原RT-DETR官方版本实验参数,使用原汁原味的RT-DETR模型,才能高效跑实验、高效涨点、收割小论文、完成大论文!!!

本文针对Ultralytics训练RT-DETR精度不佳问题,提供参数配置优化方案。通过对比官方RT-DETR参数设置,详细指导如何修改Ultralytics版本的关键参数,包括优化器、学习率、权重衰减等6处配置调整。操作步骤涵盖default.yaml文件修改和trainer.py代码调整,确保模型收敛性能达到官方水平,帮助研究者快速提升实验效果。文末附官方源码链接和具体参数配置网址供参考。

Ai缝合怪、助力小伙伴高效发论文 1775

回文 - 回文的性质

回文的性质 以前,一看到回文这两个字我就头大。记得有一次去面试的时候,我看到回文,脑子一片空白(PS: 菜的呀 TvT )。前两天松鼠做了回文的问题,他说其实掌握了回文的性质其实还好。我一听,对!问题的关键在于要先把性质梳理一下,之后很多问题就迎刃而解了!接下来,我们就一步步来吧! 回文定义 - Palindrome 一个数字或者字符串正读/反读都一样,例如,1221,123454321,“abcdcba”等等。 首先,给大家一个判断String是否为回文的算法。 public boolean

zhaoyangyingmu的博客 3615

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2133

1000以内的回文数_从回文诗到回文数

回文诗,顾名思义,就是能够回还往复,正读倒读皆成章句的诗篇。回文诗是我国古典诗歌中一种较为独特的体裁。明末浙江才女吴绛雪作《四时山水诗》很奇物,诗云: 其实英文里也有回文。Radar雷达Rotator旋转体Nolemons,no melon.没有柠檬,没有甜瓜。 Able was I ere I saw Elba.在见到厄尔巴岛之前,我本无所不能。(拿破仑)...

weixin_39595487的博客 3267

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

回文串

1.1. 最长回文串 LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如"Aa"不能当做一个回文字符串。注 意:假设字符串的长度不会超过 1010。 回文串:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。——百度百科 地址:https://baike.baid...

qq_40180411的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

回文

回文(palindrome),不是指回族文字(

独碟的博客 7511

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

回文诗

据说,有一次苏轼专程上门拜访秦观。家人告诉苏轼,他出外游玩,很可能上佛印和尚寺里去了。于是苏轼写信去询问他的情况。秦少游见苏轼来信后,便写了一封只有14字的怪信遣人带回给苏轼。 苏轼看后,连声叫好。原来,秦观写的是一首回文诗,诗中描述了他在外出游玩的生活和情趣。其内容为:“赏花归去马如飞,去马如飞酒力微。酒力微醒时已暮,醒时已暮赏花归。”14个字组成了一首七言绝句,每个字出现两次,文字处理技巧高超...

qq_28641023的博客 2619

10000内的回文数c语言,回文数

“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。[1]设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。[1]注意:1.偶数个的数字...

weixin_35399893的博客 4618

python 回文素数

回文素数 描述 回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。 用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬ 输入格式 输入一个正整数‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬

weixin_52005267的博客 2万+

回文数怎么计算_通过加1计算回文数

回文数怎么计算One morning, while walking, I saw a building with the number 13231, and I identified that number as a palindrome (a number that is the same when the digits are read forwards and backwards) and ...

weixin_26750481的博客 3481

回文算法总结

回文算法总结 最长回文子串 # # @lc app=leetcode.cn id=5 lang=python3 # # [5] 最长回文子串 # # @lc code=start class Solution: def longestPalindrome(self, s: str) -> str: size = len(s) if size < 2: return s # 至少是 1

justsolow的博客 1173

【leetcode】回文子串、最长回文子串、最长回文子序列、最长回文串

中等给你一个字符串s,请你统计并返回这个字符串中的数目。是正着读和倒过来读一样的字符串。是字符串中的由连续字符组成的一个序列。算法思路推荐看代码随想录(

SAVSORRY的博客 1784

【C语言】回文数和回文字符串的判断

一、名词解释: 如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666 同理如果一个字符串正着反着都是一样就称为这个字符串是回文字符串,例如“aba”,"aabb" 二、解题思路 回文数解题思路一:可以将整数逐位存到数组中,在依次把第一个和最后一个比较,直到中间位为止 这个思路同回文字符串的思路相同。 回文数解题思路二:将该整数逆置后的整数和逆置前比较...

Jacky_Feng的博客 4194

回文系列总结

回文系列题目,大致分为两种,一种是整数类型回文,一种是字符串类型回文。第二种较为常见。 1> 整数类型回文 题目 Leetcode 9:判断一个整数是否是回文数。 方法1:整数转化为字符串,判断是否相等 bool isPalindrome(int x) { string s = to_string(x); int i = 0, j = s.size() - 1; while(i < j) {

lyqptp233的博客 663

面试+算法之回文(Java):验证回文串、回文数、最长回文子串、回文链表、分割成回文串、最短回文串、

验证回文串、回文数、最长回文子串、分割成回文串、最短回文串、回文链表

lonelymanontheway的博客 892

回文串,回文数,最长回文子串

文章目录一. 回文串二. 回文数三. 最长回文子串 一. 回文串 判断输入的字符串是否为回文串 Input : a s d f d s a return : true 解题思路: 在此处我想到的是快排的思想: 定义两个标兵,让后让 left 和 right 从字符串两端向中心遍历 如果left和right指向的字符不相等返回false,当left==right时为回文串 public ...

iqqcode 783
上一篇: 最小区间
下一篇: 并查集
要什么单车
博客等级 码龄8年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值