首页 > 其他分享 >字符串——1.反转字符串II

字符串——1.反转字符串II

时间:2024-07-29 17:58:24浏览次数:13  
标签:p2 字符 反转 II 循环 字符串 个字符

力扣题目链接

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

示例:

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

一开始看这个题目可能会有点混乱,但归根结底就是字符串的反转,只不过这道题目设置了多个条件,我们结合示例一个一个条件看就很简单了。

如示例中,整数为2,那根据要求,字符串中每4个字符为一组,每组的前两个字符反转。如果最后的字符凑不够4个,就又分了两种情况,剩余字符数小于2的话就全部反转,剩余字符数大于等于2小于4时就反转前两个字符。(其实你换个角度想,归根结底就一个条件,就是4个字符为一组,每组的前两个字符反转)

完整代码如下:

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        # Two pointers. Another is inside the loop.
        p = 0
        while p < len(s):
            p2 = p + k
            # Written in this could be more pythonic.
            s = s[:p] + s[p: p2][::-1] + s[p2:]
            p = p + 2 * k
        return s

代码其实很简单,但需要你去理解。首先,定义一个p赋值为0,while循环的要求是p小于字符串长度。在循环中再次定义一个节点为p2,将其p+k赋值给它。

接着的关键代码,s = s[:p] + s[p: p2][::-1] + s[p2:]。相信很多基础不行的同学在循环中定义条件时,喜欢将第一次循环代入进去来判断自己定义的条件对不对。在本题中,将一开始的p=0代入,那么p2=2,s=s[:0]+s[0:2][::-1]+s[2:],代码很正确,条件也符合题目。但有些同学会疑惑了,为什么要加一个s[:0]?这不是多此一举?我直接让s =s[p: p2][::-1] + s[p2:],前面k个字符反转,后面k个不变。

在第一次循环中,确实s[:0]的作用并不明显,但你放到第二个循环中看,s=s[:4]+s[4:6]+s[6:],你如果不加s[:p],是不是当前循环所在组的前面字符都被省略了?因此s = s[:p] + s[p: p2][::-1] + s[p2:]中s[:p]是为了保证当前组之前的字符不被修改或忽略,s[p: p2][::-1]是为了在当前组进行反转操作,s[p2:]是为了当前组之后的字符不被修改或忽略。

标签:p2,字符,反转,II,循环,字符串,个字符
From: https://blog.csdn.net/plutomty/article/details/140776887

相关文章

  • 【IEEE-CPS独立出版,高录用,该出版社检索快速且稳定!收稿主题大,管理、计算机相关主题皆可
    2024年创新与信息管理国际会议(ICIIM2024)为第四届管理科学和软件工程国际学术会议(ICMSSE2024)的分会,主会由ACM珠海分会,广州番禺职业技术学院主办;全国区块链行业产教融合共同体承办,将于2024年9月6-8日于广州召开。会议旨在为从事管理与信息工程领域的专家学者、工程技术人员、......
  • [笔记]字符串哈希
    定义把一个字符串映射到一个整数的函数称作哈希函数,映射到的这个整数就是这个字符串的哈希值。需要注意的一点是,哈希是将大空间上的东西(字符串有无穷多个)映射到了小空间(一定范围内的整数),所以必定会存在冲突,即若干个不同的字符串映射到了相同的哈希值,我们将这种冲突称作“哈希碰......
  • C#动态计算字符串中的表达式
    最近遇到一个需要计算字符串中表达式的需求,需要从字符串公式中动态计算结果。类似下面这样1stringexpression="Age*0.2+Height*0.1+log4"; 使用DataTable.Compute函数一开始找的是下面这种方法,但是不能计算对数1usingSystem.Data;23DataTabledt=ne......
  • 简单介绍plc如何控制电机正反转
    PLC(可编程逻辑控制器)控制电机正反转的过程可以通过以下步骤清晰地表示和归纳:一、了解电机正反转工作原理电机正反转是指电机能够实现顺时针和逆时针旋转的工作状态。通过改变电机内部线圈中电流的方向,可以实现电机的正反转。当电流方向与磁场方向一致时,电机顺时针旋转;当电......
  • nii转dicom及修改dicom信息
    importnibabelimportnumpyasnpimportpydicomimportosfromtqdmimporttqdmdefconvertNsave(arr,file_dir,index=0,slice_thickness=1.0,pixel_spacing=(1.0,1.0)):"""`arr`:parameterwilltakeanumpyarraythatrepresents......
  • 把数组的元素内容反转 arr = {11,22,33,44,55,66} -->{66,55,44,33,22,11},找规律方
    1publicclassshuzu06{2//编写一个main方法3publicstaticvoidmain(String[]args){456//定义数组7int[]arr={11,22,33,44,55,66};8//思路分析9//规律10//1.把arr[0]和arr[5]进行交换{6......
  • 如何从pandas中的字符串中提取带有变量的正则表达式?
    我有一个包含文本的数据框列,我想创建一个新列,其中包含带有名称的句子,但没有其他句子。希望最终结果如下所示:我能够从名称列表中识别包含名称的单元格,但我在提取包含名称的句子的部分上遇到了困难。importreimportpandasaspdimportnumpyasnpdf=pd.Dat......
  • 分割字符串
    在Delphi中,分割字符串可以通过多种方式实现,最常用的方法是使用TStringList、String.Split方法(在Delphi2009及以上版本中可用),或者使用正则表达式。以下是几种常见的方法来分割字符串。使用TStringListTStringList是一个非常方便的类,可以用来分割字符串并存储结果。us......
  • LeetCode 408场周赛,Q3. 统计 1 显著的字符串的数量;问题分析
    https://leetcode.cn/contest/weekly-contest-408/problems/count-the-number-of-substrings-with-dominant-ones/description/、、这题难度是middle,但是确实有点强思维的味道,赛时思考了许久,没想到好方向,最后想了个线段树的解法。。当然最后超时了861/884,二十多个用例过不去;......
  • SpringBoot的分层解耦(三层架构,控制反转,依赖注入)
    目录一、项目结构二、案例引入三、三层架构1.介绍2.代码拆分(1)控制层Controller(2)业务逻辑层Service业务接口业务实现类(3)数据访问层Dao数据访问接口数据访问实现类(4)接口测试四、解除耦合1.高内聚与低耦合2.控制反转和依赖注入3.解耦后的代码(1)控制层Co......