解法1(中心扩展法) 时间复杂度O(n^2),空间复杂度为O(1)。中心扩展法的思路是,遍历到数组的某一个元素时,以这个元素为中心,向两边进行扩展,如果两边的元素相同则继续扩展,否则停止扩展。...进行填充,比如说用#进行填充如下: 如下图这样填充之后就又成了一个中心对称的回文串,因此对于一个串进行处理时,先进行扩充,这样可以使中心扩展时比较方便,不用对非中心对称的子串进行特殊处理。...假设填充前的子串长度为 len 那么扩充或的长度为:2 * len+1,由这个关系也可以很方便的得到扩充前回文串的长度。...} 上面代码做两点说明: ①palindrome()对给出的字符串填充后进行遍历,对遍历的每一个元素调用中心扩展函数获得回文子串的值,并保存最长回文子串的值。...当子串的长度为 2 且 里面的两个元素相同时,则也是回文子串。
一、题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。...如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回 最靠近左边 的那一个。...如果枢轴左边的元素个数小于k,则在左边的子数组中继续查找;如果枢轴左边的元素个数大于等于k,则在右边的子数组中继续查找。最后,当找到第k小的元素时,返回该元素即可。...2.1.3 最长公共子序列长度 题目描述:给定两个字符串,求最长公共子序列的长度。 解题思路:可以使用动态规划算法来解决这个问题。...如果字符串长度分别为m和n,则可以定义一个二维数组dp[m+1][n+1],其中dp[i][j]表示字符串s1的前i个字符和字符串s2的前j个字符的最长公共子序列长度。
接下来我们根据两数组长度之和的「奇偶性」分开讨论: 「情况 1」:如果 A 数组和 B 数组的总长度是「偶数」,则中位数的选择条件为: ❝左半部分的长度等于右半部分,且左半部分最大的值小于等于右半部分最小的值...❞ image.png 「情况 2」:如果 A 数组和 B 数组的总长度是「奇数」,则中位数的选择条件为: ❝左半部分的长度比右半部分大 1,且左半部分最大的值小于等于右半部分最小的值。...新的字符串具有如下性质: 新字符串中的任意一个回文子串在原始字符串中均有唯一回文子串与之对应 新字符串的回文子串一定以分隔符作为两边的边界 新字符串的回文子串的长度一定是奇数(如下图所示) ?...辅助数组 p 具有如下性质: ❝辅助数组 p 的最大值即为原字符串「最长回文子串」的长度。 ❞ 关于上述性质,可以分两种情况进行证明: 原字符串最长回文子串的中心为字符: ?...原字符串最长回文子串的中心为空隙: ?
每次在中二层循环吗,添加了个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
方法一:模拟 思路 通过模拟字符串轮转的过程,来进行字符串的比较,最后得出结论,s2 是否为 s1 旋转而成; 首先比较字符串的长度,如果两个字符串的长度都不一样,那肯定就不是有旋转而成的,伪代码如下:...# 接着往下走 然后再通过遍历将俩字符串进行一一比较,比如指针先指向 s1 的第一位,移动 s2 直到找到与之匹配的,再接着往下,如果不对则结束接下来的匹配,然后将指针指向 s1 的下一位,如此往复...这个新字符串 s3,可以发现 s2 就是 s3 的子串,如果 s1 无法通过旋转得到 s2,那么自然就不是 s3 的子串了,所以伪代码如下: s3 = s1 + s1 if s2 in s3:...数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。...这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
利用双指针技巧,一个指针用于遍历数组,另一个指针指向新数组的末尾。 移除元素: 给定一个数组和一个值,原地移除数组中所有等于该值的元素,返回新数组的长度。...使用双指针技巧,一个指针遍历数组,另一个指针记录非零元素的位置,并将非零元素依次移到前面。 反转字符串: 反转给定的字符串。...利用双指针技巧,一个指针从数组的开头向后移动,另一个指针从数组的末尾向前移动,依次交换两个指针指向的元素。 最长回文子串: 找到给定字符串中的最长回文子串。...作者通过介绍中心扩散法,结合双指针技巧,在遍历过程中寻找回文子串的中心点。 删除排序链表中的重复元素: 删除排序链表中重复的元素,使得每个元素只出现一次。...如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。
(1) 如果+两边都是字符串,则拼接。 (2) 如果+两边都是数字,则加法运算。 (3) 如果+两边类型不同,则抛出异常。 可以将多个字面字符串直接放到一起实现拼接。...返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。...fillchar – 填充字符,默认为空格。 返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。...end – 结束索引,默认为字符串的长度 检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置...检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常
方法 说明 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),则切片在右侧是无界的,即切片直到字符串的末尾。
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]。
利用双指针技巧,一个指针用于遍历数组,另一个指针指向新数组的末尾。 移除元素: 给定一个数组和一个值,原地移除数组中所有等于该值的元素,返回新数组的长度。...利用双指针技巧,一个指针从数组的开头向后移动,另一个指针从数组的末尾向前移动,依次交换两个指针指向的元素。 最长回文子串: 找到给定字符串中的最长回文子串。...如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。...这样,通过遍历字符串,以每个字符及相邻字符为中心,不断扩展找到所有可能的回文串,最终得到最长回文串的长度和起始位置。...函数 Pame(s, l, r) 的作用是在给定字符串 s 中,以指定的左右指针 l 和 r 为中心,向两端扩展,寻找回文串。这个函数的具体实现应该考虑到奇数长度和偶数长度的情况。
使用指定的 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 空格符)
回文子串 题目链接:https://leetcode-cn.com/problems/palindromic-substrings/ 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。..., "aaa" 提示:输入的字符串长度不会超过 1000。...图中有6个true,所以就是有6个回文子串。 注意因为dp[i][j]的定义,所以j一定是大于等于i的,那么在填充dp[i][j]的时候一定是只填充右上半部分。...首先确定回文串,就是找中心然后想两边扩散看是不是对称的就可以了。 在遍历中心点的时候,要注意中心点有两种情况。 一个元素可以作为中心点,两个元素也可以作为中心点。...所以我们在计算的时候,要注意一个元素为中心点和两个元素为中心点的情况。
字符串的切片,就是从原字符串中提取一部分出来,可以是连续的,也可以是离散的。 那么字符串依靠的是什么来取得呢?那就是索引。 元素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 为填充的字符,默认为空格。
作为 str 的长度。默认值为 str.length。 endsWith()方法用来判断当前字符串是否是以另外一个给定的子字符串“结尾”的,根据判断结果返回 true 或 false。...用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。...如果 indexStart 等于 indexEnd,substring 返回一个空字符串。 如果省略 indexEnd,substring 提取字符一直到字符串末尾。...如果separator是空字符串(""),则所有元素之间都没有任何字符。...在该索引(以 0 为基数)处结束提取字符串。如果省略该参数,slice() 会一直提取到字符串末尾。
(1)字符串居中(往两边)填充 str.center(width[, fillchar]) 字符串居中,左右两边使用fillchar进行填充,使得整个字符串的长度达到width指定的大小。...str.rjust(width[, fchar]) #使用fchar填充在字符串的左边,使得整体长度为width。 PS:如果不指定fchar,则默认使用空格填充。...如果width小于或等于字符串的长度,则无法填充,直接返回原字符串,且不会创建新的字符串对象。...如果S前右正负号+/-,则0填充在这两个符号的后面,且符号也算入长度。 如果width小于或等于S的长度,则无法填充,直接返回原字符串,且不会创建新字符串对象。...可以指定起始start和结束end的搜索位置。 rfind()则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和find()是等价的。
最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 实例1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。...这道题可以使用中心扩展法实现,从中间开始向两边扩散来判断回文串。...for 0 <= i < len(s): 找到以 s[i] 为中心的回文串 更新答案 但是回文串可能是长度可能是奇数,也可能是偶数,因此需要加多一步: for 0 <= i < len...(s): 找到以 s[i] 为中心的回文串 找到以 s[i] 和s[i+1] 为中心的回文串 更新答案 完整代码如下: class Solution { public...无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
题目描述 (简单难度) 给定一个数组和一个目标和,从数组中找两个数字相加等于目标和,输出这两个数字的下标。 2. 解法一 简单粗暴些,两重循环,遍历所有情况看相加是否等于目标和,如果符合直接输出。...解法二 最长公共子串 根据回文串的定义,正着和反着读一样,那我们是不是把原来的字符串倒置了,然后找最长的公共子串就可以了。...当我们求长度为 6 和 5 的子串的情况时,其实只用到了 4 , 3 长度的情况,而长度为 1 和 2 的子串情况其实已经不需要了。...经过处理,字符串的长度永远都是奇数了。 首先我们用一个数组 P 保存从中心扩展的最大个数,而它刚好也是去掉 “#” 的原字符串的总长度。例如下图中下标是 6 的地方。...我们现在要求 P [ i ], 如果是用中心扩展法,那就向两边扩展比对就行了。但是我们其实可以利用回文串 C 的对称性。
: 如果fast遇到值为val的元素,则直接跳过,否则就赋值给slow指针,并让slow前进一步。...这就是力扣第 5 题「最长回文子串」: 函数签名如下: String longestPalindrome(String s); 找回文串的难点在于,回文串的的长度可能是奇数也可能是偶数,解决该问题的核心是从中心向两端扩散的双指针技巧...如果回文串的长度为奇数,则它有一个中心字符;如果回文串的长度为偶数,则可以认为它有两个中心字符。...,如果输入相同的l和r,就相当于寻找长度为奇数的回文串,如果输入相邻的l和r,则相当于寻找长度为偶数的回文串。...res : s2; } return res; } 你应该能发现最长回文子串使用的左右指针和之前题目的左右指针有一些不同:之前的左右指针都是从两端向中间相向而行,而回文子串问题则是让左右指针从中心向两端扩展
,两边用一个字符表示(切记非字符串) string.count(sub[, start[, end]]) #计数字符串中某子集的数量,可以通过start和stop参数设置搜索范围 string.endswith...如果指定的长度小于原字符串的长度则返回原字符串 string.partition(sep) #用来根据指定的分隔符将字符串进行分割,分割点为首次出现sep的地方,且包含分隔符,结果存为元组 string.replace...-1,可以通过start和stop参数设置搜索范围 string.rindex(sub [,start [,end]]) #返回子字符串sub在字符串中最后出现的位置,如果没有匹配的字符串会报异常,可以通过...start和stop参数设置搜索范围 string.rjust() #返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。...如果指定的长度小于字符串的长度则返回原字符串 string.rpartiton() #用来根据指定的分隔符将字符串进行分割,分割点为最后一次出现sep的地方,且包含分隔符,结果存为元组 string.split
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, ...)
领取专属 10元无门槛券
手把手带您无忧上云