LeetCode 0541.反转字符串 II:模拟

news/2025/2/1 7:55:37/

【LetMeFly】541.反转字符串 II:模拟

力扣题目链接:https://leetcode.cn/problems/reverse-string-ii/

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

 

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

 

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104

解题方法:模拟

使用l0len(s) - 1遍历要翻转字符串的左端点,那么要翻转字符串的右端点就是min(l + r, len(s)) - 1。每次l += 2*k

对于字符串s[l, r],如何翻转?若不能调用编程语言内置函数,可在l < r时交换s[l]s[r]并右移l和左移r各一次。

  • 时间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-01-31 11:58:52* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-01-31 12:02:00*/
class Solution {
private:inline void reverse_(string& s, int l, int r) {reverse(s.begin() + l, s.begin() + r);}
public:string reverseStr(string& s, int k) {for (int l = 0; l < s.size(); l += k * 2) {reverse_(s, l, min(l + k, (int)s.size()));}return s;}
};
Python
'''
Author: LetMeFly
Date: 2025-01-31 12:02:40
LastEditors: LetMeFly.xyz
LastEditTime: 2025-01-31 12:08:02
'''
class Solution:def reverseStr(self, s: str, k: int) -> str:s = list(s)for l in range(0, len(s), k * 2):s[l:l + k] = s[l:l + k][::-1]return ''.join(s)
Java
/** @Author: LetMeFly* @Date: 2025-01-31 12:11:33* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-01-31 12:16:13*/
class Solution {private void reverse(char[] s, int l, int r) {  // [l, r]while (l < r) {char temp = s[l];s[l++] = s[r];s[r--] = temp;}}public String reverseStr(String s1, int k) {char[] s = s1.toCharArray();for (int l = 0; l < s.length; l += k * 2) {reverse(s, l, Math.min(l + k, s.length) - 1);}// return s.toString();  // 不可!return new String(s);}
}
Go
/** @Author: LetMeFly* @Date: 2025-01-31 12:17:35* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-01-31 12:18:54*/
package mainimport "slices"func reverseStr(s1 string, k int) string {s := []byte(s1)for i := 0; i < len(s); i += k * 2 {slices.Reverse(s[i:min(i + k, len(s))])}return string(s)
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/145404901


http://www.ppmy.cn/news/1568373.html

相关文章

【项目集成Husky】

项目集成Husky 安装初始化 Husky在.husky → pre-commit文件中添加想要执行的命令 安装 使用 Husky 可以帮助你在 Git 钩子中运行脚本&#xff0c;例如在提交代码前运行测试或格式化代码pnpm add --save-dev husky初始化 Husky npx husky init这会在项目根目录下创建一个 .hu…

MotionLCM 部署笔记

目录 依赖项 humanml3d&#xff1a; sentence-t5-large 下载数据&#xff1a; 报错&#xff1a;No module named sentence_transformers 继续报错&#xff1a;from transformers.integrations import CodeCarbonCallback 解决方法&#xff1a; GitHub - Dai-Wenxun/Moti…

数据库性能优化(sql优化)_SQL执行计划03_yxy

数据库性能优化_SQL执行计划详解03 1 排序、聚集类操作符1.1 SORT 排序1.2 聚集AAGR 简单聚集FAGR 快速聚集HAGR HASH分组聚集SAGR 流分组聚集1.3 排序、聚集类操作符总结2 执行计划读取技巧1 排序、聚集类操作符 1.1 SORT 排序 它的主要功能是按照指定的列(或列组合)以及排…

手机app如何跳过无障碍权限实现弹框自动点击-ADB连接专题

手机app如何跳过无障碍权限实现弹框自动点击 --ADB连接专题 一、前言 我们在前期的时候&#xff0c;在双SIM卡进行协同外呼和SIM卡切换时&#xff0c;对如何在手机中“执行批处理脚本做自动点击”的内容进行预研&#xff0c;力图使用事件触发和坐标点击等方式来实现手机安装…

页高速缓存与缓冲区缓存的应用差异

页高速缓存&#xff08;Page Cache&#xff09;与缓冲区缓存&#xff08;Buffer Cache&#xff09;是计算机系统中用于提高数据访问性能的两种不同类型的缓存机制&#xff0c;它们的差异主要体现在以下几个方面&#xff1a; 缓存目的 页高速缓存&#xff1a;主要用于加速对磁…

单细胞-第四节 多样本数据分析,下游画图

文件在单细胞\5_GC_py\1_single_cell\2_plots.Rmd 1.细胞数量条形图 rm(list ls()) library(Seurat) load("seu.obj.Rdata")dat as.data.frame(table(Idents(seu.obj))) dat$label paste(dat$Var1,dat$Freq,sep ":") head(dat) library(ggplot2) lib…

基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Matlab实现TCN-BiLSTM时间卷积神经网络结合双向长短期记忆神经网络多特征分类预测(附模型研究报告)

Matlab实现TCN-BiLSTM时间卷积神经网络结合双向长短期记忆神经网络多特征分类预测&#xff08;附模型研究报告&#xff09; 目录 Matlab实现TCN-BiLSTM时间卷积神经网络结合双向长短期记忆神经网络多特征分类预测&#xff08;附模型研究报告&#xff09;分类效果基本描述程序设…