
leetcode字符串
文章平均质量分 56
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
leetcode 647 剑指 Offer II 020. 回文子字符串的个数python
题目描述:题解:中心拓展思路:对每个可能的回文中心分别向两侧进行拓展,判断当前对应的子字符串是否回文。回文中心分为奇数和偶数两种情况。以s=abba,s长度为4为例,可能的回文中心有:a ab b bb b ba a7种,回文中心起始和终止位置如下:第i组回文中心的左右边界分别为:l = i//2 j = l+i%2然后分别判断s[l]与s[j]是否相同,相同则说明找到一个回文字串,然后l r分别向左和向右移动,知道超出范围或两个位置的字符不相等。class Solutio原创 2022-01-05 10:59:57 · 776 阅读 · 0 评论 -
leetcode 680 剑指 Offer II 019. 最多删除一个字符得到回文
题目描述:题解:1.判断字符串s是否回文,i取值从0到len(s)//2+1,j=len(s)-i-1,如果每组s[i] s[j]都相等,则s回文。2.如果某对s[i] s[j]不想等,判断去掉s[i]或s[j]之后,s是否回文。即s[i+1:j+1](去掉s[i])或者s[i:j](去掉s[j])是否回文。class Solution: def validPalindrome(self, s: str) -> bool: def helper(s):原创 2022-01-04 21:21:00 · 689 阅读 · 0 评论 -
leetcode 125 剑指 Offer II 018. 有效的回文python
题目描述:题解:1.将输入字符串s中数字和字母依次添加到一个数组中,添加字母的时候将字母全部转为小写形式。2.判断数组中的第i个元素是否与len-i-1相等。class Solution: def isPalindrome(self, s: str) -> bool: l_str = [] for i in range(len(s)): if s[i]>='a' and s[i]<='z':原创 2022-01-04 21:16:58 · 239 阅读 · 0 评论 -
剑指 Offer 67. 把字符串转换成整数python
题目描述:题解:1.去除str多余空格。2.首先判断str[0]弟一个字符是否合法,如果str[0]是数字,正负号,则合法,否则直接返回0.3.flag记录数字正负,1为正,-1为负,zero_nums记录之前是否出现过非0数字,用于去掉多余先导0。4.从下标1开始对str遍历,将所有数字保存在nums数组中,如果str[i]出现小数点或字母,i位置之后的数字都视为无效。5.先将nums中保存的数字转为字符串形式判断是否超界,如果没有则将其转为整型数字并返回。clas.原创 2021-12-20 10:02:10 · 548 阅读 · 0 评论 -
leetcode5. 最长回文子串
题目描述:题解:参考https://blog.youkuaiyun.com/weixin_40449300/article/details/823188491.暴力搜索对输入s的每个位置i,判断从len-1到i的子串是否回文def longestPalindrome(self, s): lens = len(s) maxlen = 0 res =[] for i in range(lens): for j in range(lens,i,-1):原创 2021-04-12 17:45:06 · 102 阅读 · 0 评论 -
leetcode 748. 最短补全词 python
题目描述:题解:1.遍历输入字符串licensePlate,将其中的字母全部转为小写,并利用dict_s记录licensePlate每个字母对应的出现次数。2.对words中每个word做以下处理:初始化flag=0,统计dict_s中每个字母在word的出现次数,如果大于等于dict_s[对应字幕],flag++,如果最终flag==len(dict_s),则说明输入字符串licensePlate中所有的字母都在word中存在。同时如果遇到更短的满足以上要求的word则更新。c.原创 2021-12-10 15:21:23 · 376 阅读 · 0 评论 -
leetcode794. 有效的井字游戏python
题目描述:题解:1.利用state 一个3*3的数组记录输入board的状态,如果board对应位置为X则将state对应位置设为1,如果是O则将state对应位置设为0,利用xnum onum记录board中X和O数量。2.如果onum>xnum 或xnum onum之差大于1,则返回False(因为两个玩家总是交替下棋,并且玩家1先下)3.分别计算state每行,每列,两个对角线位置的值之和,如果和为3,flag1+1,如果为0,flag2+1,flag1 2分别对应.原创 2021-12-09 16:53:39 · 2959 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序python
题目描述:题解一:python库split自动去掉字符串首位和中间多余的空格class Solution(object): def reverseWords(self, s): words = s.split() words.reverse() result = " " return result.join(words)题解二:双指针参考剑指 Offer 58 - I. 翻转单词顺序(双指针/python库函.原创 2021-12-06 16:23:09 · 569 阅读 · 0 评论 -
leetcode 1816. 截断句子python
题目描述:题解:利用split函数返回的listclass Solution(object): def truncateSentence(self, s, k): words = s.split(" ") result = " ".join(words[0:k]) return result原创 2021-12-06 15:03:58 · 141 阅读 · 0 评论 -
1446. 连续字符python
题目描述:题解:依次遍历字符串s的每个位置,判断和上一个位置的字符是否相等,相等则power+1。class Solution(object): def maxPower(self, s): power = 1 maxpower = 1 for i in range(1,len(s)): if s[i]==s[i-1]: power=power+1 ..原创 2021-12-01 10:15:29 · 217 阅读 · 0 评论 -
leetcode 438. 找到字符串中所有字母异位词 python
题目描述:题解:1.从s的第一个位置开始,每次取s的片段s[i:i+len(p)]2.将s[i:i+len(p)]按照字母表顺序排序,如果和p按照字母表顺序排列结果相同,则将i加入记录最终子串开始索引的poslist中。class Solution(object): def findAnagrams(self, s, p): lenp = len(p) poslist = [] p_sorted = sorted(p) .原创 2021-11-28 13:40:46 · 316 阅读 · 0 评论 -
剑指 Offer 50. 第一个只出现一次的字符python
题目描述:题解:1.用一个dict分别记录输入字符串s中每个字符出现的次数。2.按照每个字符在s中出现的次数,依次判断字符出现的次数是否为1,为1则返回。class Solution(object): def firstUniqChar(self, s): mydict = {} for i in range(len(s)): if s[i] in mydict: mydict[s[i]]=原创 2021-11-28 13:28:31 · 178 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串python
题目描述:题解一 :通过创建两个list,第一个list保存s前n个字符,第二个list保存剩下的字符,把第一个list接在第二个之后,以字符串形式返回结果。class Solution(object): def reverseLeftWords(self, s, n): list1 = [] list2 = [] for i in range(len(s)): if i<n:原创 2021-11-26 09:34:45 · 256 阅读 · 0 评论 -
leetcode剑指 Offer 05. 替换空格python
题目描述:题解一:通过1.将输入字符串s的每个字符保存在一个list中。2.将list中空格替换为'%20'。3.将list中结果以字符串形式返回。class Solution(object): def replaceSpace(self, s): s_list = [] for c in s: s_list.append(c) for i in range(len(s_list)): .原创 2021-11-26 09:14:02 · 242 阅读 · 0 评论 -
leetcode 423. 从英文中重建数字python
题目描述:题解一:未通过1.word_to_num保存对应位置数字对应的单词。2.在输入s中,从word_to_num第一个位置单词开始,如果可以找到,则向nums加入对应数字。3.将nums中结果以字符串形式输出。结果:未通过,没有考虑到同一个数字出现多次的情况class Solution(object): def originalDigits(self, s): word_to_num = ["zero","one","two","three",".原创 2021-11-24 09:20:09 · 293 阅读 · 0 评论 -
leetcode 859. 亲密字符串 python
题解:1.如果输入字符串s和goal长度不等,则返回False。2.如果s和goal完全相同,因为需要交换一次,因此如果s中存在相同的字符则返回True。3.如果s和goal恰好有两个位置i,j的字符不同,并且s[i]=goal[j] s[j]=goal[i]则为True。其他情况都返f回False。class Solution(object): def buddyStrings(self, s, goal): lens = len(s) ...原创 2021-11-23 09:44:38 · 516 阅读 · 0 评论 -
leetcode 520. 检测大写字母 python
题目描述:题解:1.遍历输入字符串word的每一个字符,将其中的大写字母位置记录在pos中。2.判断pos:<1>如果len(pos)和word长度相同,说明是全部大写的情况。<2>如果len为空,对应全部小写的情况。<3>如果len长度为1,并且对应的位置序号为0,对应首字母大写的情况。其他情况全部返回False。class Solution(object): def detectCapitalUse(self, word.原创 2021-11-13 11:56:13 · 339 阅读 · 0 评论 -
leetcode剑指 Offer II 033. 变位词组python
题目描述:题解:之前在《编程珠玑》中见到过合并变位词组的问题,分两步解决:<1>对每个单词按照字母表顺序排列,互为变位词的单词结果应该相同。<2>将结果相同的单词合并。其中第一步将原单词与排列后单词的对应使用dict实现,然后将dict中的values提取合并在一个list中。class Solution(object): def groupAnagrams(self, strs): mydict = {} ..原创 2021-11-11 17:05:10 · 683 阅读 · 0 评论 -
leetcode567. 字符串的排列python
题解:(不知道算不算滑动窗口1.首先判断s1 s2长度相等的特殊情况。2.start从0开始,每次选择s2[start:start+len(s1)]的滑动窗口。3.将滑动窗口的内容和s1按照字母顺序进行排序,判断排序后结果是否相同。class Solution(object): def checkInclusion(self, s1, s2): if len(s1)==len(s2): a = sorted(s1) ..原创 2021-10-08 21:16:26 · 163 阅读 · 0 评论 -
leetcode 557. 反转字符串中的单词 III python
题目描述:题解:1.先将输入字符串s中的每个单词保存在list words中。2.将words中的每个单词word进行反转。3.将反转后的word添加到字符串res中,需要注意空格的处理。class Solution(object): def reverseWords(self, s): res = "" words = s.split(" ") for i in range(len(words)):原创 2021-09-29 10:32:53 · 164 阅读 · 0 评论 -
leetcode 387. 字符串中的第一个唯一字符python
题目描述:在一个输入的字符串中找到第一个只出现一次的字符,返回其位置。思路一(未通过):创建一个list charlist,从字符串最后一个位置开始向前搜索,如果当前位置对应的字符不在charlist中,则说明其为第一次出现,加入charlist,并将该位置记录在firstpos中。因为无论字符串中是否有重复的字符,字符串的最后一个位置的字符都会被认为是第一次出现,加入charlist中,将firstpos记录为len(s)-1。因此需要加一个判断的过程:判断位置为firstpos的..原创 2021-09-14 15:12:19 · 217 阅读 · 0 评论 -
leetcode43. 字符串相乘
题目描述:题解:参考思路:https://segmentfault.com/a/1190000023612393(1)判断特殊情况,num1 num2有一个为0时,乘积为0(2)将num1 num2中数位较少的记为nnum2,多的记为nnum1(3)从nnum2的个位数字开始依次与nnum1相乘(注意处理最前进位),并填充0(4)将以上结果相加,得到数字类型的结果result(5)将result从个位开始依次保存在数组arrres中(6)将arrres每个数读取加入字符串原创 2021-06-10 10:18:18 · 92 阅读 · 0 评论 -
leetcode28. 实现 strStr()
题目描述:题解1:直接利用find函数寻找子串开始位置,不存在则返回-1,为空的特殊情况返回0def strStr(self, haystack, needle): if needle=="": return 0 index = haystack.find(needle) return index题解2:遍历haystack字符串,如果在某个位置i与needle中第一个字符相同,则从该位置开始比对,完全相同则返回i,否则返回-1原创 2021-05-26 11:35:29 · 140 阅读 · 0 评论 -
leetcode22. 括号生成
题目描述:题解:参考https://segmentfault.com/a/11900000221100821.设计一个递归函数helper(left,right,mystr,res) left表示剩余左括号数量,right表示剩余右括号数量,mystr表示当前找到的一种组合方式,res保存所有可能结果 left right均为0时说明找到了一种组合,mystr加入res中 left>0,mystr中添加一个左括号,传入新的left值和新的mystr进行递归 ...原创 2021-05-26 11:13:31 · 83 阅读 · 0 评论 -
leetcode13. 罗马数字转整数
题目描述:题解:<1>利用map strtonum保存罗马字符与数字的对应<2>对输入字符s遍历,判断读入的字符,如果是'I' 'X' 'C'则对特殊情况进行判断。def romanToInt(self, s): strtonum = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} result = 0 index = 0 while index<len(s):原创 2021-05-25 15:53:26 · 74 阅读 · 0 评论 -
leetcode20. 有效的括号
题目描述:https://leetcode-cn.com/problems/valid-parentheses/题解1:字符串替换参考:https://www.jianshu.com/p/75a4686f0d9b找出输入字符串s中所有'()' '[]' '{}'组合并替换为'',判断完成替换后的字符串是否为空def isValid(self,s): lens = len(s) while '()' in s or '[]' in s or '{}' in s:原创 2021-05-25 11:24:47 · 138 阅读 · 0 评论 -
leetcode17. 电话号码的字母组合
题目描述:题解:1.用map digtostr保存每个数字对应的字符2.输入digits中有diglen个数字,result保存组合结果初始化为空3.对digits中每个数字找到对应字符,当处理第一个数字时,将数字对应字符保存在result,处理后续数字时,将字符保存在str_list4.将result中每个元素与str_list组合保存在tmp中,并对result更新5.算法主要思想是随着数字的读取不断更新resultdef letterCombinations(se原创 2021-05-25 10:47:53 · 153 阅读 · 0 评论 -
leetcode14. 最长公共前缀
题目描述:题解:1.strnum记录输入strs中有几个单词2.找到strs中最短字符串的长度保存在minlen中3.maxcomstr保存最长公共子串,初始化为“”4.从每个单词的第一个字符开始比较,是否所有的字符串对应位置的字符均相等5.flag表示如果出现一次不相等则结束,即使之后存在相同的字符def longestCommonPrefix(self, strs): strnum = len(strs) minlen = 1000 for i in ra原创 2021-05-25 09:05:35 · 87 阅读 · 0 评论 -
leetcode12. 整数转罗马数字python
题目描述:题解:基本思路:<1>建立一个map roma将1 5 10 50 100 500 1000的数字和罗马字母对应起来,建立数组number=[1,5,10,50,100,500,1000]<2>从number中最后一个元素1000开始,num=num/number[i],计算输入num中各有几个1000 500 100 50 10 5 1,保存在数组numtoroma中<3>根据数组numtoroma中各个值,将对应的罗马字符加入数组原创 2021-05-17 17:19:39 · 236 阅读 · 2 评论 -
leetcode9 回文数
题目描述:题解:def isPalindrome(self, x): x = str(x) lenx = len(x) flag = 1 i = 0 j = lenx-1 if lenx==2: if x[0]==x[1]: return True else: return False while True: if x[i]!=x[j]:原创 2021-05-06 17:03:22 · 80 阅读 · 0 评论