首页 > 其他分享 >反转字符串

反转字符串

时间:2024-02-26 22:46:05浏览次数:21  
标签:end 反转 top 字符串 指针 复杂度 赋值

思路

1、建立双指针,一个指最前的元素,一个指最后的元素。将它们两两交换

设长度是n,反转可以看成s[0] = s[n-1],top指针指向s[0],end指针指向s[n-1],交换完毕后,top指针++,end指针--,交换s[1]=s[n-2],依次推类。
结束循环的条件:

  • 如果n是奇数,循环的条件为top = end = n/2
  • 如果n是偶数,最后交换的是top=n/2 - 1, end = n/2 然后各自移动一位变成 top = end+1 = n/2

偶数数组的情况
image
奇数数组的情况
image

综上所述,我们的循环条件可以设定为top>=end

复杂度分析:

  • 时间复杂度:O(N),N为s的长度
  • 空间复杂度:O(1),仅用到若干额外变量。

2、语法糖

  • s[::-1]表示反转s中的元素
  • s[:]表示数组中所有子模块
  • s[:]=s[::-1]表示将原数组反转后赋值给s中每一个对应的位置
  • s=s[::-1]表示将s反转后赋值给新的对象s(可以通过id函数查看内存地址),与题意原地修改不符。

class Solution:

点击查看代码
class Solution:
    def reverseString(self, s: List[str]) -> None:
        # s[:] = s[::-1] 是切片赋值语法,表示用 s[::-1] 替换 s 中的元素。
        # 注意不能写成 s = s[::-1],因为 s 只是一个局部变量,
        # 对它的修改不会影响到函数外部传入的实际参数。
        s[:] = s[::-1]
def reverseString(self, s: List[str]) -> None:
    # s[:] = s[::-1] 是切片赋值语法,表示用 s[::-1] 替换 s 中的元素。
    # 注意不能写成 s = s[::-1],因为 s 只是一个局部变量,
    # 对它的修改不会影响到函数外部传入的实际参数。
    s[:] = s[::-1]

题解参考来源于:https://leetcode.cn/problems/reverse-string/solutions/2376290/ji-chong-bu-tong-de-xie-fa-pythonjavacgo-9trb

标签:end,反转,top,字符串,指针,复杂度,赋值
From: https://www.cnblogs.com/codingsaveWorld/p/18035771

相关文章

  • 掌握字符与字符串:C语言中的神奇函数解析(一)
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 控制反转IOC与依赖注入DI
    控制反转IOC与依赖注入DI需要掌握DI和IOC的含义是什么?掌握NetCore自带的依赖注入原理以及如何实现的流程以及熟悉对应的接口作用。学会在你的项目中集成AutoFacIOC控制反转--思想什么是IOC?IOC即控制反转,记住他是一种思想,目的是用来管理项目中对象的生命周期和依赖关......
  • 438. 找到字符串中所有字母异位词C
    今天出成绩了,感觉徘徊在被刷的边缘,要好好努力了。这题我想法试建立hash映射成有序的数字,只要字符串个数相同,并且映射和相同那么就是异位串。后来这个想法是错的。以为假设已经已知一个和,和组成这个和的个数,但这个子数并不唯一,比如10=1+2+7。10=2+3+5。这样就会误判。就算能找......
  • tomorin的字符串迷茫值
    tomorin的字符串迷茫值题目描述tomorin定义一个字符串的迷茫值为该字符串包含"mygo"连续子串的个数。例如"mygomygo"、"itsmygo"的迷茫值分别为2,1,而"bangdream"的迷茫值为0。现在tomorin有一个字符串,她准备删除一些字符,但不能删除两个连续字符。tomorin想知道在所有删除方案......
  • bitmap 位图 底层原理标记的字符串放在哪
    在Redis中,位图(bitmap)是通过字符串(string)类型来实现的,具体来说,位图是存储在Redis字符串中的二进制位数据。Redis字符串一般采用动态字符串实现,最大长度可以达到512MB。对于位图来说,每个二进制位代表一个状态或标记,可以表示非常多的状态信息,同时占用的存储空间很小。当使用......
  • 通达信涨停反转指标公式源码副图
    {股票指标}X_1:=(CLOSE-ma(CLOSE,210))/MA(CLOSE,210)*100;X_2:=COUNT(MA(CLOSE,60)>MA(CLOSE,210),50)>=30;X_3:=COUNT(X_1<35,50)>=30;X_4:=COUNT(CLOSE>MA(CLOSE,210),50)>=30;X_5:=COUNT((MA(CLOSE,13)-MA(CLOSE,60))/MA(CLOSE,60)*100<30,60)&g......
  • Python 字符串格式化输出
    数字n:int=1000000000print(f'{n:_}')#1_000_000_000print(f'{n:,}')#1,000,000,000对齐var:str='var'#右对齐,使用_填充print(f'{var:_>20}')#_________________var#左对齐,使用#填充print(f'{var:#<20}�......
  • JavaScript语法-字符串模板
    [TOC]##JavaScript模板字符串###代码以下是index.js的部分代码:```onShareAppMessage({const{toName,mainText,fromName}=this.data;debugger;return{title:'叮,您收到一张贺卡~',path:'pages/index/index?toname=${toName}&mai......
  • isdigit函数用法、获得字符串对应的数字
    1.isdigit函数用法语法:#include<ctype.h>intisdigit(intch);使用需要添加头文件#include<ctype>。功能:如果参数是0到9之间的数字字符,函数返回非零值,否则返回零值。2.GetNUmber//获得字符串对应的数字doubleGetNumber(stringstr,intindex){doublenumb......
  • 算法-字符串
    1.反转字符串(LeetCode344)题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。思路:双指针,左边和右边对应位置的依次交换classSolution{......