![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
BlackMan_阿伟
不积跬步无以至千里
展开
-
April——76. 最小覆盖子串
class Solution: def minWindow(self, s: str, t: str) -> str: if s==t: return s right = 0 left = 0 start = 0 win_max = float('inf') dic = defaultdict(int) for char in t: ...原创 2021-04-22 19:43:13 · 56 阅读 · 0 评论 -
April——面试题 01.06. 字符串压缩
class Solution: def compressString(self, S: str) -> str: if not S: return S tmp = S[0] count = 1 res = '' for i in range(1,len(S)): if S[i]==tmp: count+=1 ...原创 2021-04-21 10:40:05 · 94 阅读 · 0 评论 -
March——7.整数反转
class Solution: def reverse(self, x: int) -> int: #取整的原因是因为 由于Python的 // 操作是向下取整,导致正负数取余 % 操作结果不一致,因此需要将原数字转为正数操作。 #将每一位进行拆分,然后再进行组合 y, res = abs(x), 0 boundry = (1<<31) -1 if x>0 else 1<<31 ...原创 2021-03-29 23:29:11 · 144 阅读 · 0 评论 -
March——191.位1的个数
class Solution: def hammingWeight(self, n: int) -> int: #将整数转化为二进制 res = 0 while n>0: res+=(n%2) n = n//2 return res #n&n-1会把最后一个1变为0 ret = 0 while n: ...原创 2021-03-22 13:20:32 · 73 阅读 · 0 评论 -
March——331.验证二叉树的前序序列化
class Solution: def isValidSerialization(self, preorder: str) -> bool: #叶子的节点书总是比非叶子节点数多一 degree = 1 for node in preorder.split(','): if degree==0: return False #如果是#入度是1,出度是0,当前度为-1...原创 2021-03-12 09:43:21 · 85 阅读 · 0 评论 -
March——150.逆波兰表达式求值
class Solution: def evalRPN(self, tokens: List[str]) -> int: f1 = lambda x,y:x+y f2 = lambda x,y:x-y f3 = lambda x,y:x*y f4 = lambda x,y:int(x/y) dic = {'+':f1,'-':f2,'*':f3,'/':f4} stack = [] ...原创 2021-03-11 21:41:31 · 101 阅读 · 0 评论 -
March——395.至少有K个重复字符的最长子串
class Solution: def longestSubstring(self, s: str, k: int) -> int: #如果字符串的长度是小于k的直接返回0 if len(s)<k: return 0 #遍历该字符串 for c in set(s): #如果该字符的出现次数小于k,那么一定不能在子字符串中出现 ...原创 2021-03-02 11:03:48 · 89 阅读 · 0 评论 -
February——424. 替换后的最长重复字符
class Solution: def characterReplacement(self, s: str, k: int) -> int: res = 0 right,left = 0,0 size = len(s) counter = Counter() while right<size: counter[s[right]]+=1 #在一个窗口内...原创 2021-02-19 16:15:22 · 58 阅读 · 0 评论 -
February——485.最大连续1的个数I,II
class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: #滑动窗口法 res = 0 i = 0 windows = [] tmp = 0 while i<len(nums): if nums[i]!=0: ...原创 2021-02-19 15:27:32 · 96 阅读 · 0 评论 -
LeetCode——1202.字符串交换
#总体思想是先建图,然后再遍历图去找最大连图分量,然后对每个连通分量排序就可以得到最小值class Solution: def dfs(self,res,graph,visited,x): for neighbor in graph[x]: if not visited[neighbor]: visited[neighbor] = 1 res.append(neighbor) .原创 2021-01-11 13:01:46 · 165 阅读 · 0 评论 -
LeetCode——228.汇总区间
其实就是查找一个数组确实的数字,这个数字怎么查找嗯?通过**nums[index]+1==nums[index+1]**去进行查找,这样最终会同得到确实的数字,然后确定一个区间,找出区间的两头数字即可。如果该区间的长度是1的话,那么就直接输出单个数字即可。class Solution: def summaryRanges(self, nums: List[int]) -> List[str]: res = [] if not nums: .原创 2021-01-11 12:56:02 · 96 阅读 · 0 评论 -
LeetCode——830.较大分组的位置
class Solution: def largeGroupPositions(self, s: str) -> List[List[int]]: if not s: return [] #双指针 res = [] i=0 size = len(s) while i<size: j=i+1 ...原创 2021-01-05 15:44:20 · 71 阅读 · 0 评论 -
《Leetcode of December》剑指 Offer 67. 把字符串转换成整数
class Solution: def strToInt(self, str: str) -> int: ''' ^:匹配字符串开头 [\+\-]:代表一个+字符或-字符 ?:前面一个字符可有可无 \d:一个数字 +:前面一个字符的一个或多个 ''' #正则表达式 INT_MAX = 2147483647 INT_MIN = -2...原创 2020-12-30 10:46:55 · 127 阅读 · 0 评论 -
《Leetcode of October》763. 划分字母区间
class Solution: def partitionLabels(self, S: str) -> List[int]: dic = {} res = [] start,end = 0,0 #用字典记录每个字母最后出现的位置 for i in range(len(S)): dic[S[i]]=i for ...原创 2020-10-22 16:46:55 · 124 阅读 · 0 评论 -
《Leetcode of October》925. 长按键入
class Solution: def isLongPressedName(self, name: str, typed: str) -> bool: size = len(name) target = len(typed) i,j=0,0 while j<target: if i<size and name[i]==typed[j]: ...原创 2020-10-21 11:15:57 · 108 阅读 · 0 评论 -
《Leetcode of October》844. 比较含退格的字符串
利用栈进行操作 如果当前字符步是#那么就入栈,如果当前字符是#,而且栈不为空,那么就出栈 然后比较T和S的结果是否相等class Solution: def backspaceCompare(self, S: str, T: str) -> bool: def helper(s): res = [] for i in s: if i!='#': ..原创 2020-10-19 21:17:31 · 68 阅读 · 0 评论 -
《Leetcode of October》1002. 查找常用字符
class Solution: def commonChars(self, A: List[str]) -> List[str]: result = list() for w in set(A[0]): count = [x.count(w) for x in A] a = w * min(count) for i in a: result.append...原创 2020-10-14 22:46:00 · 156 阅读 · 0 评论 -
《Leetcode of October》345. 反转字符串中的元音字母(十月小序)
说到十月我们会想到什么呢?当然是国庆节,放假,还有苏联的十月革命。当然十月这个月份世界上发生了大大小小的事情,川普住院,外国政变等等等等这些事情大多数和我都没有关系,也和大部分的普通老百姓没有什么关系,但是十月是一个新的开始,是对9月的总结,既是对收获的总结,也是对未来的计划。零零散散的已经记录了好几个月自己的解题过程,当然十月是不能少的,十月还是要继续的。这个月份准备做一些目标检测方向的paper的解读或者是一些基本原理的理解,这些都将会记录在博客里面,与此同时每个月的4本读书计划还是不能少的,闲言碎语不原创 2020-10-08 15:13:42 · 109 阅读 · 0 评论 -
《Leetcode of September 》60.第K个排列
这个题目用数学方去解决,1~n,选定第1位不同,剩下的n-1位进行全排列组合有(n-1)!中,下标从0开始,所有第一位的元素就可以确定,index=k//(n-1)!.确定第一位之后紧接着更新k。k=k-index*(n-1)!.然后继续依次的重复上述操作,直到把第n位的元素找出来。 #在解题区看到一个说法觉得非常清晰明了:注意k是从0开始的 直接用回溯法做的话需要在回溯到第k个排列时终止就不会超时了, 但是效率依旧感人 可以用数学的方法来解, 因为数..原创 2020-09-07 10:24:05 · 65 阅读 · 0 评论 -
《Leetcode of September 》剑指 Offer 20. 表示数值的字符串
题目链接:20.表示数值的字符串class Solution: def isNumber(self, s: str) -> bool: try: float(s) except: return False return True 总结:答案实在是看不明白,投机取巧好方法。...原创 2020-09-02 20:31:09 · 84 阅读 · 0 评论 -
《Leetcode of September 》剑指Offer 45.把数组排成最小的值
题目链接:45.把数组排成最小的值class Solution: def minNumber(self, nums: List[int]) -> str: #快排 def fast_sort(l , r): if l >= r: return i, j = l, r while i < j: while strs[j] + ..原创 2020-09-01 21:18:45 · 116 阅读 · 0 评论 -
反转字符串/反转字符串II/反转字符串中的单词
题目链接:344.反转字符串541.反转字符串II557.反转字符串中的单词1、反转字符串class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ i,j = 0,len(s)-1 while i<j:原创 2020-08-30 20:16:14 · 174 阅读 · 0 评论 -
《Leetcode》459. 重复的子字符串
题目链接:459.重复的子字符串28. 实现 strStr()class Solution: def strStr(self, haystack: str, needle: str) -> int: if not needle: return 0 size=len(needle) for i in range(len(haystack)-size+1): if haystack[i原创 2020-08-24 21:28:51 · 120 阅读 · 0 评论 -
判定字符串的问题:面试题01.01.字符串是否唯一、是否可以重排
class Solution: def isUnique(self, astr: str) -> bool: #return len(set(astr))==len(astr) #位运算 mark = 0 for i in astr: #移动的位数 move = ord(i)-ord('a') #如果移动后与mark取与运算不等于0,那就说明有相同...原创 2020-08-22 11:27:19 · 195 阅读 · 0 评论 -
中心扩散法:647.回文子串
题目链接:647.回文子串class Solution: def countSubstrings(self, s: str) -> int: if not s: return 0 #扩散函数 def spread(l,r): count=0 while l>=0 and r<=len(s)-1 and s[l]==s[r]: ..原创 2020-08-19 10:48:34 · 261 阅读 · 0 评论 -
括号问之:20有效的括号
题目链接20.有效的括号1、题目分析字符串只有三种类型的括号,如果先有右括号一定不是有效的,如果每一个左括号都能匹配到右括号就算成功。2、解题分析初始话一个字典,包含三个键值对,就是三队括号 初始化两个字符串,一个包含左括号,一个包含右括号 进行for循环遍历 如果是左括号直接添加到辅助栈 如果是右括号且辅助站是空直接返回Fasle 如果右括号与栈顶元素匹配就弹出栈顶元素 否则返回Fasle 循环结束判断一下辅助栈是否为空 如果为空,为所有的左括号找到了右括号原创 2020-08-14 21:18:15 · 312 阅读 · 0 评论 -
进位相加:415. 字符串相加
给定两个字符串形式的非负整数num1 和num2,计算它们的和。注意:num1 和num2的长度都小于 5100.num1 和num2 都只包含数字0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。1、题目分析题目非常简单,给定两个数字的字符串计算加法,然后返回相加后结果字符串。问题的关键在于两个:1、如何处理两个长度不同的字符串;2、如何处理进位问题。2、解题分析先计算出来两个字符...原创 2020-08-03 19:00:15 · 172 阅读 · 0 评论 -
双指针:392.判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例1:s = "abc", t = "ahbgdc"返回true.示例2:s = "axc", t = "...原创 2020-07-27 17:46:20 · 107 阅读 · 0 评论 -
《Leetcode》32. 最长有效括号
给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"1、题目分析其实就是找到最长括号,所谓最长的括号一定是一对一对的。比如()()or((())),所以本质就是一个配对题,看能配的对数最长是多少。2、解题分析利用栈去进行操作,可以初始化一个栈第一个元素是-1,这个-1的作用有两个...原创 2020-07-04 11:40:06 · 250 阅读 · 0 评论 -
《Leetcode》67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"1、题目分析题目比较简单,将两个二进制的字符串加起来然后返回一个二进制的字符串2、解题分析我采用的方式是将二进制之和转为十进制在转为二进制,有两个方法:自己写和调用内置函数 自己写的函数 将两个二进制的字符...原创 2020-06-23 17:24:24 · 77 阅读 · 0 评论 -
《Leetcode》14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。思路:1、题目分析本题的意思就是统计一个列表种所有单词公用的最长前缀是什么。2、解题分析如果列表长度等于0的话直接返回空字符串 如果列表长度不小于0的话用一下两种方法去做 zip函数...原创 2020-06-15 15:07:06 · 116 阅读 · 0 评论 -
《Leetcode》面试题58 - I. 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输...原创 2020-06-08 17:29:03 · 242 阅读 · 0 评论 -
《Leetcode》面试题58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出: "umghlrlose"思路:1、题目分析题目的意思就是让把前n个字符和后面的字符调换位置2、解题分析两个方法原创 2020-06-07 15:22:16 · 167 阅读 · 0 评论 -
《Leetcode》680、 验证回文字符串 Ⅱ
给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。思路:这个题和125.验证回文串还不一样,它分两种情况来讨论。如果它是传统的回文串那就返回True,如果一个字符串删掉一个字符是回文串那么它也算是回文串。传统的当然好处理了,在125题中已经写过了。对于非传统的回文串,我.原创 2020-05-19 12:09:24 · 397 阅读 · 0 评论 -
《Leetcode》125、验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false思路:啥是回文串呢?就是反转以后和之前的一毛一样。给了一个不规则的字符串,这个字符串里面有很多无关信息,比如说空格,符号等等。所以先清理字符串,在判断是否是回文串。清理提取字符串我用正则表达原创 2020-05-19 11:47:18 · 151 阅读 · 0 评论