字符串经典题目(Leetcode题解-Python语言)

344. 反转字符串

class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""left = 0right = len(s) - 1while left < right:s[left], s[right] = s[right], s[left]left += 1right -= 1

双指针法,左右各一个指针并且进行字符交换,注意只有列表才可以两两交换,字符串只能够用切片反转 [::-1]

541. 反转字符串 II

class Solution:def reverseStr(self, s: str, k: int) -> str:l = list(s)for i in range(0, len(l), 2*k):l[i:i+k] = l[i:i+k][::-1]return ''.join(l)

按照题目的要求,每次遍历 2k 个字符,然后对前 k 个字符进行反转,字符串反转用 [::-1] 即可。

557. 反转字符串中的单词 III

class Solution:def reverseWords(self, s: str) -> str:return ' '.join(word[::-1] for word in s.split(' '))

用 split 分隔出每个单词,然后用 [::-1] 反转单词,最后再用 join 结合一起即可。

125. 验证回文串

class Solution:def isPalindrome(self, s: str) -> bool:left = 0right = len(s) - 1while left < right:if not s[left].isalnum():left += 1continueif not s[right].isalnum():right -= 1continueif s[left].lower() != s[right].lower():return Falseelse:left += 1right -= 1return True

双指针法,注意指针如果指向的不是数字或者字母就移到下一位,直到都指向数字或字符为止。然后对两个指针指向的字符进行比较,直接转化为小写比较即可(对数字用小写也不会报错),不相等就返回 False,否则就下一位。

345. 反转字符串中的元音字母

class Solution:def reverseVowels(self, s: str) -> str:l = list(s)left = 0right = len(s) - 1vowels = ('a', 'e', 'i', 'o', 'u')while left < right:while left < right and l[left].lower() not in vowels:left += 1while left < right and l[right].lower() not in vowels:right -= 1if left < right:l[left], l[right] = l[right], l[left]left += 1right -= 1return ''.join(l)

还是双指针法,同样的,如果指针指向的不是元音字母就移到下一位,直到是元音字母为止,然后对两个指针指向的字符进行交换即可。

3. 无重复字符的最长子串

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:left = 0right = 0window = dict()ans = 0while right < len(s):if s[right] not in window:window[s[right]] = 1else:window[s[right]] += 1while window[s[right]] > 1:window[s[left]] -= 1left += 1ans = max(ans, right - left + 1)right += 1return ans

双指针 + 滑动窗口,初始时先让 right 指针向右移位,遍历到的字符记录在滑动窗口中,直到有字符是第二次出现,此时就开始让 left 指针右移,直到滑动窗口中没有重复字符为止,对所有的无重复字符子串(滑动窗口)取长度最大值即可。

151. 颠倒字符串中的单词

class Solution:def reverseWords(self, s: str) -> str:return ' '.join(reversed(s.split()))

这题用内置函数就是一行,要注意的是 reversed() 比切片反转 [::-1] 要更快,因为前者只是生成了一个迭代器,而后者是创建了一个新的列表。如果是自己实现的话,代码如下:

class Solution:def trim_spaces(self, s: str) -> list:left, right = 0, len(s) - 1# 去掉字符串开头的空白字符while left <= right and s[left] == ' ':left += 1# 去掉字符串末尾的空白字符while left <= right and s[right] == ' ':right -= 1# 将字符串间多余的空白字符去除output = []while left <= right:  # 等于right的也要考虑,因为只用了left一个指针遍历if s[left] != ' ':  # 不是空白字符output.append(s[left])elif output[-1] != ' ':  # 是第一个出现的空白字符output.append(s[left])left += 1return outputdef reverse(self, l: list, left: int, right: int) -> None:while left < right:l[left], l[right] = l[right], l[left]left, right = left + 1, right - 1def reverse_each_word(self, l: list) -> None:n = len(l)start = end = 0while start < n:# 循环至单词的末尾while end < n and l[end] != ' ':end += 1# 翻转单词self.reverse(l, start, end - 1)# 更新start,去找下一个单词start = end + 1end += 1def reverseWords(self, s: str) -> str:l = self.trim_spaces(s)# 翻转字符串self.reverse(l, 0, len(l) - 1)# 翻转每个单词self.reverse_each_word(l)return ''.join(l)

分三步走:移除多余空格、将整个字符串反转、将每个单词反转。要注意各个指针的范围

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈了千百遍的缓存数据的一致性问题

“灵魂拷问保证缓存和数据库的一致性很简单吗&#xff1f;有哪些方式能保证缓存和数据库的一致性呢&#xff1f;如果发生了缓存和数据库数据不一致的情况怎么办呢&#xff1f;在上篇文章我们介绍了缓存的定义分类以及优缺点等&#xff0c;如果还没看的同学可以移步这里听说你会…

BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统

一:项目背景 项目描述 一个基本功能较为完整的后台管理项目。项目主要功能有&#xff1a;登录验证&#xff0c;登录功能还加入了随机验证码的验证&#xff1b; 用户注册&#xff0c;注册中密码基于srping 安全框架提供的加密(自动加盐)的密码储存方式&#xff0c;对注册重名进…

字符串匹配经典题目——KMP算法(Leetcode题解-Python语言)

28. 实现 strStr() strStr(haystack: str, needle: str) 的作用就是在 haystack 字符串&#xff08;长度为 n&#xff09;中找出 needle 字符串&#xff08;长度为 m&#xff09;出现的第一个位置&#xff08;下标从 0 开始&#xff09;。如果不存在&#xff0c;则返回 -1 &am…

Istio Pilot 源码分析(二)

张海东&#xff0c; ‍多点生活&#xff08;成都&#xff09;云原生开发工程师。本篇主要介绍 Pilot 源码中的 ServiceEntryStore 及其推送 xDS 的流程。本文为 Istio Pilot 源码分析系列的第二篇文章。Istio Pilot 源码分析&#xff08;一&#xff09;了解了 Pilot 源码的基本…

Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

直接在搜索引擎里进行搜索&#xff0c;可以看到官方文档中两者对应的页面&#xff1a; 分别点击进去&#xff0c;第一个链接解释了什么是 torch.Tensor&#xff1a; torch.Tensor 是一个包含单一数据类型元素的多维矩阵&#xff08;数组&#xff09;。 正因为 torch.Tensor 只包…

leetcote34. 在排序数组中查找元素的第一个和最后一个位置

一:题目 二&#xff1a;上码&#xff08;暴力二分&#xff09; // class Solution { // public: // /** // 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// …

Git 图形化操作之合并提交记录

Git 图形化操作之合并提交记录独立观察员 2020 年 9 月 24 日目录1、显示日志2、合并提交记录3、推送合并的提交前言&#xff1a;当我们使用 Git 时&#xff0c;有时会遇到刚提交推送完一次修改&#xff0c;发现漏了该某处&#xff0c;只好又提交推送一次&#xff0c;这样在提交…

Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别

之前我写过一篇文章&#xff0c;比较了 torch.Tensor() 和 torch.tensor() 的区别&#xff0c;而这两者都是深拷贝的方法&#xff0c;返回张量的同时&#xff0c;会在内存中创建一个额外的数据副本&#xff0c;与原数据不共享内存&#xff0c;所以不受原数据改变的影响。 这里…

chrome禁止三方cookie,网站登录不了怎么办

背景新版chrome(80)浏览器默认屏蔽所有三方cookie已经不是什么新闻了&#xff0c;具体原因这里不去深究&#xff0c;有大量相关文章介绍&#xff0c;由于目前许多网站都依赖三方cookie&#xff0c;因此该特性的推出还是造成了一些的影响&#xff0c;比如收集用户信息的广告商&a…

leetcode69. x 的平方根

一:题目 二:上码 class Solution { public:/**思路:1.因为我们的 ans的平方 < x 那么我们就可以用二分法来做 不断缩小左右范围来确定 ans**/int mySqrt(int x) {int left 0; int right x;int ans 0;while (left < right) {long mid (right-left)/2 left;if (mid*…

两数、三数、四数之和相关题目(Leetcode题解-Python语言)

作为 Leetcode 的第一题&#xff0c;两数之和自然是知名度最高的&#xff0c;从两数之和出发也有不少的衍生题目&#xff0c;下面就让我们好好地解决它们。 1. 两数之和 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:record dict()for i…

初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存

点击上方蓝字"小黑在哪里"关注我吧聚合根仓储领域服务BLOB储存应用服务单元测试模块引用前言在前两节中介绍了ABP模块开发的基本步骤&#xff0c;试着实现了一个简单的文件管理模块&#xff1b;功能很简单&#xff0c;就是基于本地文件系统来完成文件的读写操作&…

leetcode367. 有效的完全平方数

一:题目 二:上码 class Solution { public:/**完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半2.那么这就相当于在[left,num/2]中查找某个…

二叉树最近公共祖先相关题目(Leetcode题解-Python语言)

236. 二叉树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:def dfs(root: TreeNode, p: TreeNode, q: TreeNode):# 如果当前节点为空&#xff0c;则说明 p、q 不在 node 的子树中&#xff0c;不可…

跟我一起学.NetCore之文件系统应用及核心浅析

前言在开发过程中&#xff0c;肯定避免不了读取文件操作&#xff0c;比如读取配置文件、上传和下载文件、Web中html、js、css、图片等静态资源的访问&#xff1b;在配置文件读取章节中有说到&#xff0c;针对不同配置源数据读取由对应的IConfigurationProvider进行读取&#xf…

深度学习入门笔记(1)——导论部分

此笔记来源于 Sebastian Raschka 的 Introduction to Deep Learning 系列课程。 首先介绍的是传统的编程范式&#xff0c;假设我们想实现垃圾邮件识别的功能&#xff0c;传统的方法就是由程序员来找出垃圾邮件的规则并对其进行编程&#xff0c;得到一个垃圾邮件识别的程序。 机…

新版 C# 高效率编程指南

前言C# 从 7 版本开始一直到如今的 9 版本&#xff0c;加入了非常多的特性&#xff0c;其中不乏改善性能、增加程序健壮性和代码简洁性、可读性的改进&#xff0c;这里我整理一些使用新版 C# 的时候个人推荐的写法&#xff0c;可能不适用于所有的人&#xff0c;但是还是希望对你…

深度学习入门笔记(2)—— 感知器

最经典的神经元模型&#xff0c;从左到右依次是&#xff1a;输入、权重、加权和、阈值、输出。加权和又叫做 Net Input&#xff0c;符号为 z&#xff0c;当 z 的值大于阈值时输出 1&#xff0c;小于阈值时输出 0。 实现与门和或门&#xff0c;权重为 1&#xff0c;阈值分别为 1…

创建一个对象时,在一个类当中 静态代码块 和普通代码块构造方法 的顺序?

一:前言须知 普通代码块&#xff0c;在创建对象实例的时候&#xff0c;会被调用&#xff0c;每创建一次&#xff0c;就调用一次静态代码块&#xff0c;在类加载的时候执行&#xff0c;并且只会执行一次类加载的时机: 创建对象实例的时候&#xff08;new&#xff09;创建子类实…