反转字符串II java c python 算法与数据结构

【LeetCode题目详解】344. 反转字符串541. 反转字符串 II剑指 Offer 05. 替换空格151. 反转字符串中的单词剑指 Offer 58 - II. 左旋转字符串 (day8补) 此时我们已经反转好多次字符串了,来一起回顾一下吧。在这篇文章344.反转字符串,第一次讲到反转一个字符串应该怎么做,使用了双指针法。然后发现541. 反转字符串II,这里开始给反转加上了一些条件,当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。后来在151.翻转字符串里的单词中,要对一句话里的单词顺序进行反转,发现先整体反转再局部反转 是一个很妙的思路。最后再讲到本题,本题则是先局部反转再 整体反转,与151.翻转字符串里的单词类似,但是也是一种新的思路。 阅读详情

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

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

输入:s = "abcdefg", k = 2
输出:"bacdfeg"
class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        int len = ch.length;
        for(int i = 0; i< len ; i+=2*k){

            if(i+k<=len){
                reverse(ch,i,i+k-1);
                
            }else{
                reverse(ch,i,len - 1);
            }
            
        }
        return new String(ch);
    }
    public void reverse(char[] ch,int m, int n){
        for(int i = m,j = n; i<j;i++,j--){
            char temp = ch[j];
            ch[j] = ch[i];
            ch[i] = temp;
        }
    }
}

python实现

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        t = list(s)
        for i in range(0, len(t), 2 * k):
            t[i: i + k] = reversed(t[i: i + k])//python的切片是左闭右开的
        return "".join(t)

C 实现

void swap(char* a, char* b) {
    char tmp = *a;
    *a = *b, *b = tmp;
}

void reverse(char* l, char* r) {
    while (l < r) {
        swap(l++, --r);
    }
}

int min(int a, int b) {
    return a < b ? a : b;
}

char* reverseStr(char* s, int k) {
    int n = strlen(s);
    for (int i = 0; i < n; i += 2 * k) {
        reverse(&s[i], &s[min(i + k, n)]);
    }
    return s;
}

LeetCode 151:字符串单词反转的算法实现与优化 字符串处理是编程中的基础技能,涉及遍历、分割、反转等核心操作。在算法领域,字符串反转问题考察了对数据结构的基本操作能力,特别是处理空格和单词顺序的场景。通过双指针技术可以高效实现O(n)时间复杂度,这种方法在搜索引擎查询预处理、文本编辑器开发等工程实践中都有广泛应用。LeetCode 151题作为经典面试题,60%的候选人能实现基础解法,但仅30%掌握最优解。掌握字符串反转技术不仅能提升算法能力,也是处理日志分析、自然语言处理等实际问题的关键。 阅读详情

相关推荐

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 270

详解 Leetcode 344.反转字符串 | 代码随想录 day8

在这篇文章344.反转字符串 (opens new window),第一次讲到反转一个字符串应该怎么做,使用了双指针法。然后发现541. 反转字符串II (opens new window),这里开始给反转加上了一些条件,当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。后来在151.翻转字符串里的单词 (opens new window)中,要对一句话里的单词顺序进行反转,发现先整体反转再局部反转 是一个很妙的思路。最后再讲到本题,本题则是先局部反转再 整体反转,与。

m0_64662286的博客 586

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

LeetCode 经典题:“反转字符串”

反转字符串”这道简单题通过多种方法展示了不同的解题思路。双指针法是最符合题目要求的高效解法,利用指针操作在原地完成字符串反转,空间复杂度优秀。递归法以递归的方式实现反转,但空间复杂度相对较高。使用库函数法虽然简单直接,但不符合题目对原地修改和空间复杂度的要求,不过在实际应用中,如果没有这些限制,它是一种便捷的方式。通过学习这些方法,希望大家能更好地理解字符串操作和不同算法的特点,在面对类似问题时能够灵活选择合适的解法。

jukuya的博客 1210

Ubuntu下全面解析硬盘健康:从基础检测到性能优化

本文详细介绍了在Ubuntu系统中如何全面监测硬盘健康状态。从安装smartmontools工具、解读SMART关键属性(如重新分配扇区计数、通电时间),到进行性能基准测试(使用dd和fio),最后根据检测结果提供针对性的优化与预警方案,帮助用户有效预防数据丢失并提升硬盘可靠性。

weixin_29223603的博客 287

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2163

【多种解法+详细注释】力扣算法带刷——字符串

力扣算法带刷——字符串

Liu_y_xin的博客 1149

Unreal Engine开发:角色动画与状态机_动画混合:通过混合节点实现平滑动画过渡

动画混合是提升游戏动画质量的关键技术之一。Unreal Engine提供了多种混合节点,包括BlendSpace1D、Blend Two By Bool、Blend Two By Alpha和Sequencer,每种节点适用于不同的场景。通过合理使用这些节点,可以实现平滑、自然且高效的动画过渡效果。此外,遵循最佳实践和高级应用技巧,可以进一步优化动画质量和性能。希望本节内容对你在Unreal Engine中实现动画混合有所帮助,使你的游戏角色动作更加流畅和自然。

chenlz2007的博客 1245

Leetcode 151. 反转字符串中的单词

我们也可以不使用语言中的 API,而是自己编写对应的函数。在不同语言中,这些函数实现是不一样的,主要的差别是有些语言的字符串不可变(如 Java 和 Python),有些语言的字符串可变(如 C++)。由于双端队列支持从队列头部插入的方法,因此我们可以沿着字符串一个一个单词处理,然后将单词压入队列的头部,再将队列转成字符串即可。对于字符串可变的语言,就不需要再额外开辟空间了,直接在字符串上原地实现。对于字符串不可变的语言,首先得把字符串转化成其他可变的数据结构,同时还需要在转化的过程中去除空格。

weixin_53526046的博客 757

[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算

数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像顶帽运算和图像黑帽运算,基础性知识希望对您有所帮助。

杨秀璋的专栏 1万+

C#实战大华智能安防系统:从SDK封装到视频流与智能报警的全链路落地

本文将介绍C#集成大华SDK开发安防系统的实战经验,重点解决多路视频预览卡顿和报警延迟问题。文章通过三层架构设计(SDK封装层、业务服务层、应用层)实现解耦,详细分析线程安全封装、高效解码显示和智能事件联动等核心技术。针对16路摄像头同时预览时CPU占用率过高的问题,提出使用子码流拉流与异步解码的优化方案,并总结8个常见开发陷阱的解决方案。文中还提供了大华智能安防系统的完整架构图,展示从设备层到应用层的交互流程,特别强调业务服务层中视频流服务和智能报警服务的核心功能设计。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 431

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

LeetCode 0541.反转字符串 II:模拟 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

<font color="Pink">Tisfy的博客</font> 1153

医学图像的对抗攻击:模型安全性与鲁棒性分析

医学图像的对抗攻击:模型安全性与鲁棒性分析 ,人工智能,计算机视觉,大模型,AI,本文围绕医学图像的对抗攻击展开,分析了其对AI模型的威胁。介绍了对抗样本定义、攻击原理,以及FGSM、BIM、PGD等常见攻击方法,还给出了相关代码示例。阐述了攻击对模型诊断准确性和可信度的影响,提出对抗训练、输入预处理、模型集成等提升模型安全性与鲁棒性的方法,探讨了评估指标、数据集和流程,分析了实际应用中的挑战与应对策略,最后展望了未来发展趋势。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

344.反转字符串, 541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。版权声明:本文为优快云博主「渡梦酒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。编写一个函数,其作用是将输入的字符串反转过来。反转后的字符串中不能存在前导空格和尾随空格。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。是由非空格字符组成的字符串。

渡梦酒的博客 863

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[代码随想录打卡Day8] 344.反转字符串 541. 反转字符串II 54. 替换数字

难度:易。问题描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。这个就是开头和结尾的字符交换,然后次开头和次结尾的字符交换。这个就是设计到双指针,因为它是修改数组,但是每次操作的是前后两个位置,所以思考到双指针。这两个指针同时移动,是最简单的情况。下面是C++, JAVA, Python的实现。

goodenough5的博客 482

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

算法刷题-字符串-反转字符串II

简单的反转还不够,我要花式反转。

lw的博客 1303

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C/C++每日一练(20230319) 反转链表II、解码方法、擅长编码的小k

1. 反转链表 II🌟🌟   2. 解码方法🌟🌟   3. 擅长编码的小k🌟🌟🌟

汉阳Hann's Home 2956

【字符串】leetcode541. 反转字符串II(C/C++/Java/Python/Js)

这道题目其实也是模拟,实现题目中规定的反转规则就可以了。字符串操作进阶!| LeetCode:541. 反转字符串II。

Eumenides_Suki的博客 534

(字符串) 541. 反转字符串 II——【Leetcode每日一题】

541. 反转字符串 II 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

weixin_43412762的博客 744

【字符串】剑指Offer58-II.左旋转字符串(C/C++/Java/Python/Js)

这个思路类似的题我在王道数据结构和算法的练习题也刷到过。只要思路打开了就很简单。也可以先反转整个字符串,再反转后n个子串和剩下前面的字串。一些同学热衷于使用substr,来做这道题。其实使用substr 和 反转 时间复杂度是一样的,都是O(n),但是使用substr申请了额外空间,所以空间复杂度是O(n),而反转方法的空间复杂度是O(1)。如果想让这套题目有意义,就不要申请额外空间。

Eumenides_Suki的博客 561

字符串操作实战:双指针与条件反转技巧

字符串处理是编程中的基础技能,涉及内存操作、算法优化等核心概念。双指针技术通过左右指针协同工作,能在O(1)空间复杂度下实现字符串反转,这是处理344题的关键。条件反转则需掌握字符串切片与步长控制,如541题中每2k字符反转前k个的规律。这些技术在算法面试中极为常见,尤其在大厂笔试中频繁出现。实际工程中,类似技巧可用于日志处理、数据清洗等场景。通过344反转字符串、541分段反转等经典案例,可以掌握字符串操作的核心方法论,为处理更复杂的KMP算法等打下基础。

weixin_34184158的博客 319

编程中的字符串操作:从基础反转技巧到高级应用

字符串处理是编程基础中的核心概念,涉及文本数据的存储、修改和分析。其原理基于字符序列的操作,通过指针或索引实现高效访问。在技术价值上,优化字符串处理能显著提升程序性能,特别是在日志分析、数据处理等场景。常见技术包括双指针反转、KMP算法等,其中反转字符串和字符串匹配是面试高频考点。实际应用中,如Python的f-string和Java的StringBuilder展示了不同语言的优化思路。理解这些基础操作对处理日志解析、数据清洗等工程问题至关重要,也是学习更复杂算法如编辑距离、Trie树的前提。

weixin_30363981的博客 404

151.反转字符串中的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

nanxiaotao的博客 725

字符串反转与双指针算法实战解析

字符串处理是编程基础中的核心技能,尤其在算法面试中高频出现。双指针技术作为字符串操作的经典方法,通过左右指针协同工作,能高效实现反转、去重等操作。其技术价值在于O(1)空间复杂度下完成原地修改,这对内存敏感的系统尤为重要。实际工程中,该技术广泛应用于文本编辑器撤销功能、数据库引擎字符串处理等场景。本文以LeetCode 541和151题为例,深入解析周期性反转和单词翻转的实现细节,特别针对Python字符串不可变特性和C++空格处理等实际开发痛点,提供经过大厂实战检验的优化方案。

weixin_33798152的博客 356

代码随想录算法训练营Day8 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋 | Python | 个人记录向

字符串:344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋。

Python基本算法 780

双指针法实现字符串反转的算法解析与多语言实现

字符串处理是编程基础中的核心技能,其中反转操作通过双指针算法展现经典的空间优化思想。该算法利用左右指针相向移动,在O(n)时间复杂度和O(1)空间复杂度内完成原地修改,这种模式在内存敏感场景如嵌入式开发、高频交易系统中尤为重要。以LeetCode 344题为原型,Python通过列表可变性实现优雅的多重赋值交换,Java需显式处理字符数组类型,而C++则能利用引用和swap函数提升性能。代码随想录方法论建议结合边界条件处理(如空字符串、Unicode字符)进行系统训练,此类基础算法在数据加密、编译器设计等工

weixin_30516429的博客 225
上一篇: 反转字符串 java c 算法与数据结构
下一篇: 二叉树的遍历 java 算法与数据结构
__Wang____
博客等级 码龄7年 5粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值