首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

笔试面试算法经典–最长回文

解法1(中心扩展法) 时间复杂度O(n^2),空间复杂度为O(1)。中心扩展法思路是,遍历到数组某一个元素时,以这个元素中心,向两边进行扩展,如果两边元素相同继续扩展,否则停止扩展。...进行填充,比如说用#进行填充如下: 如下图这样填充之后就又成了一个中心对称回文,因此对于一个进行处理时,先进行扩充,这样可以使中心扩展时比较方便,不用对非中心对称进行特殊处理。...假设填充长度为 len 那么扩充或长度为:2 * len+1,由这个关系也可以很方便得到扩充前回文长度。...} 上面代码做两点说明: ①palindrome()对给出字符串填充后进行遍历,对遍历每一个元素调用中心扩展函数获得回文值,并保存最长回文值。...当长度为 2 且 里面的两个元素相同时,也是回文

35230

【数据结构算法】寻找数组中心下标

一、题目描述 给你一个整数数组 nums ,请计算数组 中心下标 。 数组 中心下标 是数组一个下标,其左侧所有元素相加等于右侧所有元素相加。...如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回 最靠近左边 那一个。...如果枢轴左边元素个数小于k,则在左边数组中继续查找;如果枢轴左边元素个数大于等于k,则在右边数组中继续查找。最后,当找到第k小元素时,返回该元素即可。...2.1.3 最长公共序列长度 题目描述:给定两个字符串,求最长公共序列长度。 解题思路:可以使用动态规划算法来解决这个问题。...如果字符串长度分别为mn,则可以定义一个二维数组dp[m+1][n+1],其中dp[i][j]表示字符串s1前i个字符字符串s2前j个字符最长公共序列长度

11210
您找到你想要的搜索结果了吗?
是的
没有找到

LeetCode 刷题记录 1-5

接下来我们根据两数组长度之和「奇偶性」分开讨论: 「情况 1」:如果 A 数组 B 数组长度是「偶数」,中位数选择条件为: ❝左半部分长度等于右半部分,且左半部分最大值小于等于右半部分最小值...❞ image.png 「情况 2」:如果 A 数组 B 数组长度是「奇数」,中位数选择条件为: ❝左半部分长度比右半部分大 1,且左半部分最大值小于等于右半部分最小值。...新字符串具有如下性质: 新字符串任意一个回文在原始字符串中均有唯一回文与之对应 新字符串回文一定以分隔符作为两边边界 新字符串回文长度一定是奇数(如下图所示) ?...辅助数组 p 具有如下性质: ❝辅助数组 p 最大值即为原字符串「最长回文长度。 ❞ 关于上述性质,可以分两种情况进行证明: 原字符串最长回文中心为字符: ?...原字符串最长回文中心为空隙: ?

43850

LeetCode攀登之旅(5)

每次在中二层循环吗,添加了个count,当前面定义收尾元素分别颠倒大小时候,即为一个回文,然后重新计算count,并将其与maxcount比对。然后讲初始与末尾数进行切片即为真实回文。...''' 分为三种情况: 第一种:检测目标长度为1; 第三种:检测目标长度为2; 第四种:检测目标长度大于等于3; ''' 首先生成一个二维数组,然后根据遍历情况是否为回文,标记True...第一种:当所检测长度为1时,毋庸置疑,必然是回文,直接标记为True; 第二种:当所检测长度为2时,只需要判断当前与下一个元素是否想女即可确定该是否是回文; 第三种:当所检测长度超过...P[0]=1 因为#号左右两边不相等,直接为1,P[1]=2 因为#d#,d前后各有一个#刚好构成一个回文,然后取中心位置向左或向右扩张长度,扩张各位1,再加上本身,即为2。...第一种情况:mx>i 当 mx - i > P[j] 时候,以S1[j]为中心回文包含在以S[id]为中心回文中,由于 i j 对称,以S1[i]为中心回文必然包含在以S1[id

41420

【算法题解】 Day1 前缀

方法一:模拟 思路 通过模拟字符串轮转过程,来进行字符串比较,最后得出结论,s2 是否为 s1 旋转而成; 首先比较字符串长度如果两个字符串长度都不一样,那肯定就不是有旋转而成,伪代码如下:...# 接着往下走 然后再通过遍历将俩字符串进行一一比较,比如指针先指向 s1 第一位,移动 s2 直到找到与之匹配,再接着往下,如果不对结束接下来匹配,然后将指针指向 s1 下一位,如此往复...这个新字符串 s3,可以发现 s2 就是 s3 如果 s1 无法通过旋转得到 s2,那么自然就不是 s3 了,所以伪代码如下: s3 = s1 + s1 if s2 in s3:...数组 中心下标 是数组一个下标,其左侧所有元素相加等于右侧所有元素相加如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。...这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回 最靠近左边 那一个。如果数组不存在中心下标,返回 -1 。

13630

备战蓝桥杯————双指针技巧巧解数组1

利用双指针技巧,一个指针用于遍历数组,另一个指针指向新数组末尾。 移除元素: 给定一个数组一个值,原地移除数组中所有等于该值元素,返回新数组长度。...使用双指针技巧,一个指针遍历数组,另一个指针记录非零元素位置,并将非零元素依次移到前面。 反转字符串: 反转给定字符串。...利用双指针技巧,一个指针从数组开头向后移动,另一个指针从数组末尾向前移动,依次交换两个指针指向元素。 最长回文: 找到给定字符串最长回文。...作者通过介绍中心扩散法,结合双指针技巧,在遍历过程中寻找回文中心点。 删除排序链表中重复元素: 删除排序链表中重复元素,使得每个元素只出现一次。...如果设这两个数分别是 numbers[index1] numbers[index2] , 1 <= index1 < index2 <= numbers.length 。

15610

python字符串常用方法及汇总

(1) 如果+两边都是字符串拼接。 (2) 如果+两边都是数字,加法运算。 (3) 如果+两边类型不同,抛出异常。 可以将多个字面字符串直接放到一起实现拼接。...返回一个原字符串右对齐,并使用空格填充长度 width 字符串如果指定长度小于字符串长度返回原字符串。...fillchar – 填充字符,默认为空格。 返回一个原字符串左对齐,并使用空格填充至指定长度字符串如果指定长度小于原字符串长度返回原字符串。...end – 结束索引,默认为字符串长度 检测字符串中是否包含字符串 str ,如果指定 beg(开始) end(结束) 范围,检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回是索引值在字符串起始位置...检测字符串中是否包含字符串 str ,如果指定 beg(开始) end(结束) 范围,检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常

69520

50个Pandas奇淫技巧:向量化字符串,玩转文本处理

方法 说明 len() 计算字符串长度 strip() 等价于str.strip,去除字符串开头结尾处指定字符 rstrip() 等价于str.rstrip ,删除字符串末尾指定字符(默认为空格)...endswith() 等价于str.endswith(pat),判断字符串是否以指定字符或字符串结尾 center() 等价于str.center,即字符串str居中,两边用字符填充 ljust()...如果 None pat 长度为 1,则将 pat 视为文字字符串如果 None pat 长度不为 1,则将 pat 视为正则表达式。...如果width小于或等于字符串长度,则不添加填充如果width大于字符串长度多余空格将用空格或传递字符填充。...如果未指定 (None),切片在左侧是无界,即从字符串开头切片。 stop:整数,可选 用于切片右索引位置。如果未指定 (None),切片在右侧是无界,即切片直到字符串末尾

5.9K60

最长回文——马拉车算法详解

1、字符之间插入特殊字符 回文中心点有两种,如果长度为奇数,回文中心为最中间那个字符,如 “aba” “b”;如果长度为偶数,回文中心为最中间两个字符分界,如 “abba” “...如何计算数组 p 一般方法,是以中心点为中心,挨个将半径逐步扩张,直至字符串不再是回文字符串。但是这样做,整体算法复杂度为 O(n2) O ( n 2 ) O(n^2)。...红1为以 j 为中心回文,红2为以 i 为中心回文,红3为以 id 为中心回文(首尾两端分别为mx对称点mx)。...这里分两种情况: 先直接令 p[i] 回文就等于 p[j] 回文,即红2长度等于红1,然后判断红2末尾是否超过了 mx,如果没有超过,说明 p[i] 就等于 p[j]。...3、数组 p 中最大值,即为最长回文半径 根据半径数组 p 定义,如果最大值对应位置为 i,最大回文为 ss[i - p[i] : i + p[i] + 1]。

71320

备战蓝桥杯————双指针技巧巧解数组3

利用双指针技巧,一个指针用于遍历数组,另一个指针指向新数组末尾。 移除元素: 给定一个数组一个值,原地移除数组中所有等于该值元素,返回新数组长度。...利用双指针技巧,一个指针从数组开头向后移动,另一个指针从数组末尾向前移动,依次交换两个指针指向元素。 最长回文: 找到给定字符串最长回文。...如果字符串反序与原始字符串相同,字符串称为回文字符串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意答案。...这样,通过遍历字符串,以每个字符及相邻字符为中心,不断扩展找到所有可能回文,最终得到最长回文长度起始位置。...函数 Pame(s, l, r) 作用是在给定字符串 s 中,以指定左右指针 l r 为中心,向两端扩展,寻找回文。这个函数具体实现应该考虑到奇数长度偶数长度情况。

11210

Python基础之:Python中内部对象

使用指定 fillchar 填充两边空位(默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 返回原字符串副本。...如果给出了 maxsplit,最多进行 maxsplit 次拆分,从 最右边 开始。 str.rstrip([chars]) 返回原字符串副本,移除其中末尾字符。...str.strip([chars]) 返回原字符串副本,移除其中前导末尾字符。 chars 参数为指定要移除字符字符串如果省略或为 None, chars 参数默认移除空格符。...str.zfill(width) 返回原字符串副本,在左边填充 ASCII '0' 数码使其长度变为 width。 正负值前缀 ('+'/'-') 处理方式是在正负符号 之后 填充而非在之前。...bytearray.center(width[, fillbyte]) 返回原对象副本,在长度为 width 序列内居中,使用指定 fillbyte 填充两边空位(默认使用 ASCII 空格符)

1.4K50

动态规划:回文

回文 题目链接:https://leetcode-cn.com/problems/palindromic-substrings/ 给定一个字符串,你任务是计算这个字符串中有多少个回文。..., "aaa" 提示:输入字符串长度不会超过 1000。...图中有6个true,所以就是有6个回文。 注意因为dp[i][j]定义,所以j一定是大于等于i,那么在填充dp[i][j]时候一定是只填充右上半部分。...首先确定回文,就是找中心然后想两边扩散看是不是对称就可以了。 在遍历中心时候,要注意中心点有两种情况。 一个元素可以作为中心点,两个元素也可以作为中心点。...所以我们在计算时候,要注意一个元素中心两个元素中心情况。

51230

Python 基础(字符串

字符串切片,就是从原字符串提取一部分出来,可以是连续,也可以是离散。 那么字符串依靠是什么来取得呢?那就是索引。 元素1 元素2 元素3 ......=' ', /) 宽度, 填充字符串 返回长度宽度居中字符串 center() 字符串.center(字符串总宽度, 填充字符串) 返回一个原字符串居中,并使用空格填充长度 width 字符串...,相对于运算符而言,性能更佳 rstrip() 删除字符串字符串末尾空格. istrip() 删除字符串开头空格 strip([chars]) 在字符串上执行 lstrip() rstrip()...rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充长度 width 字符串 zfill (width) 返回长度为 width 字符串...len(string) 返回字符串长度 center(width, fillchar) 返回一个指定宽度 width 居中字符串,fillchar 为填充字符,默认为空格。

66530

夯实Python基础(2)

(1)字符串居中(往两边填充 str.center(width[, fillchar]) 字符串居中,左右两边使用fillchar进行填充,使得整个字符串长度达到width指定大小。...str.rjust(width[, fchar]) #使用fchar填充字符串左边,使得整体长度为width。 PS:如果不指定fchar,默认使用空格填充。...如果width小于或等于字符串长度,则无法填充,直接返回原字符串,且不会创建新字符串对象。...如果S前右正负号+/-,0填充在这两个符号后面,且符号也算入长度如果width小于或等于S长度,则无法填充,直接返回原字符串,且不会创建新字符串对象。...可以指定起始start结束end搜索位置。 rfind()则是返回搜索到最右边位置,如果只搜索到一个或没有搜索到find()是等价

56710

LeetCode 1-5题 详解 Java版 (三万字 图文详解 LeetCode 算法题1-5 =====>>> <建议收藏>)

题目描述 (简单难度) 给定一个数组一个目标,从数组中找两个数字相加等于目标,输出这两个数字下标。 2. 解法一 简单粗暴些,两重循环,遍历所有情况看相加是否等于目标如果符合直接输出。...解法二 最长公共 根据回文定义,正着反着读一样,那我们是不是把原来字符串倒置了,然后找最长公共就可以了。...当我们求长度为 6 5 情况时,其实只用到了 4 , 3 长度情况,而长度为 1 2 情况其实已经不需要了。...经过处理,字符串长度永远都是奇数了。 首先我们用一个数组 P 保存从中心扩展最大个数,而它刚好也是去掉 “#” 字符串长度。例如下图中下标是 6 地方。...我们现在要求 P [ i ], 如果是用中心扩展法,那就向两边扩展比对就行了。但是我们其实可以利用回文 C 对称性。

9310

数组双指针直接秒杀七道题目

如果fast遇到值为val元素直接跳过,否则就赋值给slow指针,并让slow前进一步。...这就是力扣第 5 题「最长回文」: 函数签名如下: String longestPalindrome(String s); 找回文难点在于,回文长度可能是奇数也可能是偶数,解决该问题核心是从中心向两端扩散双指针技巧...如果回文长度为奇数,它有一个中心字符;如果回文长度为偶数,则可以认为它有两个中心字符。...,如果输入相同lr,就相当于寻找长度为奇数回文如果输入相邻lr,相当于寻找长度为偶数回文。...res : s2; } return res; } 你应该能发现最长回文使用左右指针之前题目的左右指针有一些不同:之前左右指针都是从两端向中间相向而行,而回文问题则是让左右指针从中心向两端扩展

47710

python 5.1单一函数针对列表、数组、字符串

两边用一个字符表示(切记非字符串) string.count(sub[, start[, end]]) #计数字符串中某子集数量,可以通过startstop参数设置搜索范围 string.endswith...如果指定长度小于原字符串长度返回原字符串 string.partition(sep) #用来根据指定分隔符将字符串进行分割,分割点为首次出现sep地方,且包含分隔符,结果存为元组 string.replace...-1,可以通过startstop参数设置搜索范围 string.rindex(sub [,start [,end]]) #返回字符串sub在字符串中最后出现位置,如果没有匹配字符串会报异常,可以通过...startstop参数设置搜索范围 string.rjust() #返回一个原字符串右对齐,并使用空格填充长度 width 字符串。...如果指定长度小于字符串长度返回原字符串 string.rpartiton() #用来根据指定分隔符将字符串进行分割,分割点为最后一次出现sep地方,且包含分隔符,结果存为元组 string.split

1.3K100

Python 部分系统类常用方法整理

join(sub) 以字符串作为分隔符,插入到 sub 中所有的字符之间。 ljust(width) 返回一个左对齐字符串,并使用空格填充长度为 width 字符串。...返回 ('原字符串', '', '') replace(old, new[, count]) 把字符串 old 字符串替换成 new 字符串,如果 count 指定,替换不超过 count...rjust(width) 返回一个右对齐字符串,并使用空格填充长度为 width 字符串。 rpartition(sub) 类似于 partition() 方法,不过是从右边开始查找。...split(sep=None, maxsplit=-1) 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,仅分隔 maxsplit 个子字符串,返回切片后字符串拼接列表...zfill(width) 返回长度为 width 字符串,原字符串右对齐,前边用 0 填充。 format(a, b, ...)

1K20
领券