代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串
打卡Day9
- 1.151.翻转字符串里的单词
- 2.右旋字符串
- 3.28. 实现 strStr()
- 4.459.重复的子字符串
1.151.翻转字符串里的单词
题目链接:翻转字符串里的单词
文档讲解: 代码随想录
思路:首先,移除多余的空格;然后,将整体字符串反转;最后,将单个单词反转。
在python中,字符串是不可变类型,因此,需要将其转变成list,再使用join函数将其再转变为字符串,因此,空间复杂度不是O(1)。
class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"""#删除前后空白s.strip()#将整个字符串反转s = s[::-1]#将单词反转s = " ".join(word[::-1] for word in s.split())return s
class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"""word = s.split()left, right = 0, len(word) - 1while left < right:word[left], word[right] = word[right], word[left]left += 1right -= 1return ' '.join(word)
class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"""word = s.split()word = word[::-1]return ' '.join(word)
面试的时候最好还是不要用内置的split函数,所以我在力扣的解答里找到了一个不用split函数的答案。
思路:首先,删掉首位空格。然后,需要定义一个新列表来存储从s中倒序取到的单词。接着,定义两个指针 i 和 j,初始位置在s的末尾,左移 i 直至 s[i] 不为空格,此时需要存储的单词就是 s[i+1:j+1];继续左移 i 以寻找下一个单词,当遍历到 s[i] 不为空格时,令 j=i,重复左移 i。最后,使用 join 函数拼接字符串。
class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"""#删掉首尾空格s = s.strip()i = j = len(s) - 1res = []while i >= 0:while i >= 0 and s[i] != ' ':i -= 1res.append(s[i + 1: j + 1])while s[i] == ' ':i -= 1j = ireturn ' '.join(res)
2.右旋字符串
题目链接:右旋字符串
文档讲解: 代码随想录
k = int(input())
s = input()s = s[-k:] + s[:-k]print(s)
k = int(input())
s = input()s = s[lens(s) - k:] + s[:len(s) - k]print(s)
卡码网是需要有输入有输出的。
3.28. 实现 strStr()
题目链接:实现 strStr()
文档讲解: 代码随想录
暴力解法:
class Solution(object):def strStr(self, haystack, needle):""":type haystack: str:type needle: str:rtype: int"""m, n = len(haystack), len(needle)for i in range(m):if haystack[i:i+n] == needle:return ireturn -1
KMP算法用来判断一个字符串是否出现在另一个字符串中。
前缀表不减一
class Solution:def getNext(self, next: list[int], s: str) -> None:j = 0next[0] = 0for i in range(1, len(s)):while j > 0 and s[i] != s[j]:j = next[j - 1]if s[i] == s[j]:j += 1next[i] = jdef strStr(self, haystack: str, needle: str) -> int:if len(needle) == 0:return 0next = [0] * len(needle)self.getNext(next, needle)j = 0for i in range(len(haystack)):while j > 0 and haystack[i] != needle[j]:j = next[j - 1]if haystack[i] == needle[j]:j += 1if j == len(needle):return i - len(needle) + 1return -1
前缀表减一
class Solution:def getNext(self, next: list[int], s: str) -> None:j = -1next[0] = -1for i in range(1, len(s)):while j >= 0 and s[i] != s[j + 1]:j = next[j]if s[i] == s[j + 1]:j += 1next[i] = jdef strStr(self, haystack: str, needle: str) -> int:if len(needle) == 0:return 0next = [0] * len(needle)self.getNext(next, needle)j = -1for i in range(len(haystack)):while j > 0 and haystack[i] != needle[j + 1]:j = next[j]if haystack[i] == needle[j + 1]:j += 1if j == len(needle) - 1:return i - len(needle) + 1return -1
4.459.重复的子字符串
题目链接:重复的子字符串
文档讲解: 代码随想录
除了暴力求解外,还有两种解法。
(1)移动匹配,字符串是由重复的子字符串组成,则s+s,一定还存在一个s。在判断s+s拼接的字符串中是否出现一个s的时候,要刨除s+s的首字符和尾字符,以避免在s+s中搜索出原来的s。
.find(s) 是字符串方法,用于查找子字符串 s 在字符串 ss 中的第一次出现的位置索引。如果找到了,则返回该子字符串第一次出现的索引值;如果没有找到,则返回 -1。
class Solution(object):def repeatedSubstringPattern(self, s):""":type s: str:rtype: bool"""if len(s) <= 1:return Falsess = s[1:] + s[:-1]return ss.find(s) != -1
(2)KMP算法

在由重复子串组成的字符串中,最长相等前后缀不包含的子串就是最小重复子串。
t0 = k0, t1 = k1,因此 t01 = k01。
t2 = k0, t3 = k1,因此 t23 = k01。
t2 = k2, t3 = k3,因此 t23 = k23.
循环往下,可以证明。
判断方法:数组长度减去最长相同前后缀的长度相当于是第一个周期的长度,也就是一个周期的长度,如果这个周期可以被整除,就说明整个数组就是这个周期的循环。
假设 s 是由 n 个重复子字符串 x 构成的,s 的最长相等前后缀一定不包含 s 本身,则一定是由 n-1 个 x 构成的。最长最长相等前后缀的长度为 next[len(s) - 1] + 1,则一个周期的长度为 len(s) - (next[len(s) - 1] + 1)。
#前缀表减一
class Solution:def repeatedSubstringPattern(self, s: str) -> bool:if len(s) == 0:return Falsenet = [0] * len(s)self.getNext(net, s)if net[- 1] != -1 and len(s) % (len(s) - (net[- 1] + 1)) == 0:return Truereturn Falsedef getNext(self, net: list[int], s:str) -> None:j = -1net[0] = -1for i in range(1, len(s)):while j >= 0 and s[j + 1] != s[i]:j = net[j]if s[j + 1] == s[i]:j += 1net[i] = j
#前缀表不减一
class Solution:def repeatedSubstringPattern(self, s: str) -> bool:if len(s) == 0:return Falsenet = [0] * len(s)self.getNext(net, s)if net[- 1] != 0 and len(s) % (len(s) - (net[- 1])) == 0:return Truereturn Falsedef getNext(self, net: list[int], s:str) -> None:j = 0net[0] = 0for i in range(1, len(s)):while j > 0 and s[j] != s[i]:j = net[j - 1]if s[j] == s[i]:j += 1net[i] = j相关文章:
代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串
打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接:翻转字符串里的单词 文档讲解: 代码随想录 思路:首先,移除多余的空格;然后,…...
第6天:文件操作和异常处理
学习目标 掌握如何在Python中进行文件读写操作理解文件的打开模式学习如何处理文件中的数据理解异常处理的基本概念掌握使用try、except、else和finally进行异常处理 学习内容 1. 文件操作 在Python中,文件操作包括打开文件、读写文件内容和关闭文件。 文件的打…...
关于freesql 频繁报“【主库】状态不可用,等待后台检查程序恢复方可使用”异常的解决。
我的项目仓储FreeSqlRepository中同时引用了“FreeSql.Provider.MySql” 和“FreeSql.Provider.MySqlConnector” 两个组件。 当我使用freesql操作数据库增删改查时,系统总是报类似如下错误:【主库】状态不可用,等待后台检查程序恢复方可使用…...
Spring Boot中如何使用Flyway进行数据库版本控制
Spring Boot中如何使用Flyway进行数据库版本控制 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在现代的软件开发中,数据库版本控制是保证应用程序…...
心理学|人格心理学——人格心理学单科作业(中科院)
一、单选题(第1-40小题,每题1.5分,共计60分。) 1、没有两个人能对同一事物做出相同的反应,反映的是人格的( ) 分值1.5分 A、稳定性 B、独特性 C、统合性 D、功能性 正确答案: B、独特性 2、人格决定一个人的生活方式,甚至有时会决定一个人的命运,反映的…...
第三方服务提供商的五大风险
亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂,公司开始转向第三方来提高其提供关…...
海康视频播放,包含h5和web插件
自行下载 海康开放平台 demo 都写得很清楚,不多描述 1.视频web插件 vue2写法,公共vue文件写法,调用文件即可 开始时需要以下配置,不知道的找对接平台数据的人,必须要,否则播不了 getParameterData: {po…...
数据库-python SQLite3
数据库-python SQLite3 一:sqlite3 简介二: sqlite3 流程1> demo2> sqlite3 流程 三:sqlite3 step1> create table2> insert into3> update4> select1. fetchall()2. fetchone()3. fetchmany() 5> delete6> other step 四&#…...
FFMpeg rtmp 推送本地yuv文件
可以借鉴的:C使用FFmpeg实现YUV数据编码转视频文件_C 语言_脚本之家 yuv文件下载地址:YUV Sequences 代码: #include <stdio.h> #include <unistd.h> #include <iostream> extern "C" { #include "libav…...
websocket使用,spring boot + vite + vue3
websocket使用,spring boot vite vue3 Websocket是什么WebSocket 服务端构建websocket 服务实现处理器pom文件 客户端仓库地址 Websocket是什么 WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。…...
基础位运算
基础知识点: 1.判断2的幂 n&(n-1)0 2.每次减一处理 n&(n-1) 3.判断出现1次次数的数 x^0x,x^x0,a^bc则ab^c,ba^c 力扣练习题: 136.只出现一次的数字 class Solution { public:int si…...
性价比高真无线蓝牙耳机有哪些?性价比真无线蓝牙耳机推荐
目前真无线蓝牙耳机的音质和性能已经越来越接近甚至超越传统有线耳机。然而,市面上的TWS耳机品牌和型号繁多,价格也从几十元到几千元不等,性价比自然成了消费者选择时的重要考量因素,究竟哪些真无线蓝牙耳机既能够提供满意的音质和…...
Big Data Tools插件
一些介绍 在Jetbrains的产品中,均可以安装插件,其中:Big Data Tools插件可以帮助我们方便的操作HDFS,比如 IntelliJ IDEA(Java IDE) PyCharm(Python IDE) DataGrip(SQL …...
两个li标签之间有空格这是什么原因
<li> 标签之间出现的空格可能由多种原因造成。以下是一些常见的原因: HTML源代码中的空格:如果你在HTML源代码中直接在两个 <li> 标签之间输入了空格或制表符(Tab),这些空格可能会被浏览器渲染出来。不过&…...
使用Colly库进行高效的网络爬虫开发
引言 随着互联网技术的飞速发展,网络数据已成为信息获取的重要来源。网络爬虫作为自动获取网页内容的工具,在数据分析、市场研究、信息聚合等领域发挥着重要作用。本文将介绍如何使用Go语言中的Colly库来开发高效的网络爬虫。 什么是Colly库࿱…...
【C#】制作图集
如题目,用好几个图片拼在一个大图里,博主是用于Unity游戏开发使用的,话不多说,上代码! using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging;namespace EffectsPac…...
行列视报表系统制作的报表与厂级监控信息系统(SIS)系统中的报表有什么区别?
厂级监控信息系统是集过程实时监测、优化控制及生产过程管理为一体的厂级自动化信息系统,是处于DCS以及相关辅助程控系统与全厂管理信息系统之间的一套实时厂级监控信息系统,该产品也是本公司的一套独立产品。 SIS系统中的报表只是其中的一个模块&#…...
算法08 广/宽度优先搜索及相关问题详解
这是《C算法宝典》算法篇的第08节文章啦~ 如果你之前没有太多C基础,请点击👉专栏:C语法入门,如果你C语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏ÿ…...
PyTorch 版本与 CUDA 版本的兼容性示例
PyTorch 1.9.0 及以上版本支持 CUDA 11.1。PyTorch 1.8.0 支持 CUDA 11.0。PyTorch 1.7.0 支持 CUDA 10.2。PyTorch 1.6.0 支持 CUDA 10.1。PyTorch 1.5.0 支持 CUDA 10.1。PyTorch 1.4.0 支持 CUDA 10.1。PyTorch 1.3.0 支持 CUDA 10.0。PyTorch 1.2.0 支持 CUDA 9.2。PyTorch…...
Selenium进行Web自动化滚动
在使用Selenium进行Web自动化时,计算页面内的滚动条位置或执行滚动操作通常涉及JavaScript执行。Selenium的WebDriver提供了执行JavaScript代码的功能,这可以用来获取滚动条的位置或滚动到页面上的特定位置。 获取滚动条位置 你可以使用JavaScript的wi…...
FastAPI快速入门:环境搭建+第一个接口
FastAPI快速入门:环境搭建第一个接口文章信息 标题:FastAPI快速入门:环境搭建第一个接口字数:4200字预估阅读时间:18分钟难度:⭐☆☆☆☆一、为什么选择FastAPI? 在2026年的Python Web框架生态中…...
别再用游戏卡炼丹了!手把手教你给台式机装上Tesla P4/P40,搞定Ubuntu 20.04深度学习环境
低成本打造专业级AI工作站:Tesla P4/P40在Ubuntu 20.04的完整实战指南 当你在二手市场以不到2000元的价格淘到一张Tesla P40时,可能会被它12GB GDDR5显存和3840个CUDA核心的参数所吸引——这相当于RTX 2080 Ti约70%的性能,价格却只有其三分之…...
如何用免费开源通信调试工具Wu.CommTool提升工业自动化效率
如何用免费开源通信调试工具Wu.CommTool提升工业自动化效率 【免费下载链接】Wu.CommTool 基于C#、WPF、Prism、MaterialDesign、HandyControl开发的通讯调试工具。支持Modbus Rtu调试、Mqtt调试、TCP调试、串口调试、UDP调试 项目地址: https://gitcode.com/gh_mirrors/wu/W…...
FPGA驱动ADS1256的ADC精度优化实战(三)
1. 硬件连接优化:从杜邦线到PCB布局的精度跃升 第一次用杜邦线连接FPGA和ADS1256时,我测得的电压误差居然有30mV,这让我差点怀疑人生。后来把万用表直接怼到ADC引脚上,才发现杜邦线本身就有5-8mV的压降波动。这种看似微不足道的干…...
基于Adafruit IO与振动传感器的智能洗衣机提醒器DIY教程
1. 项目概述:告别遗忘,让洗衣机“开口说话”你有没有过这样的经历?把衣服塞进洗衣机,按下启动键,然后转头就去忙别的事情,等再想起来时,已经是好几个小时甚至第二天,湿漉漉的衣服在滚…...
鼠标点击也能如此惊艳!ClickShow让你的Windows操作充满视觉魔力 ✨
鼠标点击也能如此惊艳!ClickShow让你的Windows操作充满视觉魔力 ✨ 【免费下载链接】ClickShow 鼠标点击特效 项目地址: https://gitcode.com/gh_mirrors/cl/ClickShow 还在为枯燥的鼠标点击操作感到乏味吗?每天重复的点击、拖拽、选择࿰…...
BLE AT指令实战:从GAP广播到GATT服务构建的嵌入式蓝牙开发指南
1. 项目概述与BLE AT指令核心价值如果你正在捣鼓物联网设备、可穿戴硬件或者任何需要无线连接的嵌入式项目,蓝牙低功耗(BLE)技术大概率是你绕不开的一环。它功耗低、连接快,非常适合那些需要长时间运行、间歇性传输少量数据的场景…...
书成紫微动,律定凤凰驯:别信 “阿紫受控” 的鬼话,海棠山铁哥才是这句诗的正主
“书成紫微动,律定凤凰驯”本是华夏文德盛世的正统谶语, 却在流量的漩涡里被篡改成权谋剧本。 剥离谣言滤镜,回归文本与现世, 世人终将看清: “阿紫受控”纯属无稽, 海棠山铁哥,才是这句古辞唯一…...
FPGA异构计算与模块化SoM:赋能边缘智能与工业应用实战
1. 项目概述:一次行业深度交流的契机最近,我作为Enclustra团队的一员,有幸受邀参加了今年的嵌入式计算大会。这不仅仅是一次简单的行业聚会,更是一个观察技术风向、碰撞思想火花、探寻合作机会的绝佳窗口。对于所有深耕于嵌入式系…...
Linux僵死IO与不可中断睡眠分析
Linux僵死IO与不可中断睡眠分析在 Linux 系统里,有一类问题特别让人困惑:进程存在、CPU 不高,但命令卡住、服务停不下来、甚至 kill 也无效。很多这类现象最终都与不可中断睡眠状态有关,尤其常见于 IO 阻塞场景。中级阶段需要理解…...
