Day07 字符串

2023-11-08

344. 反转字符串

在这里插入图片描述

解法:二分法,思路比较加简单

class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """
        if len(s) == 1: return s
        left, right = 0, len(s)-1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

541. 反转字符串 II

在这里插入图片描述

解法:还是二分法的应用,比上一题稍微进阶一点。自己做的麻烦了。自己写的代码真是又臭又长。。

犯的错误:

  1. 字符串是不可变类型,不可直接修改,需要先转化为list类型
  2. 边界问题要思考清楚:right的初始化,以及在循环中如何更新left。如果right初始化为2k的话,看似合理,实际上如果数组中只有2k个元素,会index out of range,便不会进入循环,后续的判断也都不会符合条件,会导致原字符串没有被修改。因此初始化为2k-1。另外left每次进入循环更新为right+1,因为left到right已经是2k个元素了,进入下一个2k需要在right的基础上加一。
class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        s = list(s)
        def reverse_str(t):
            left, right = 0, len(t)-1
            while left < right:
                t[left], t[right] = t[right], t[left]
                left += 1
                right -=1
            return t
        
        left = 0
        right = 2*k - 1
        while right < len(s):
            t = reverse_str(s[left:left+k])
            s = s[0:left] + t + s[left+k:]
            left = right + 1
            right += 2*k
        if len(s) - 1 - left + 1 < k:
            s = s[:left] + reverse_str(s[left:])
        if k <= len(s) - 1 - left + 1 < 2*k:
            s = s[:left] + reverse_str(s[left:left+k]) + s[left+k:]
        return ''.join(s)


第二种:在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。而要找的也是每2k区间的起点。

#改进
class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """

        def reverse_str(t):
            left, right = 0, len(t)-1
            while left < right:
                t[left], t[right] = t[right], t[left]
                left += 1
                right -=1
            return t
        s = list(s)
        for i in range(0, len(s), 2*k):
            s[i:i+k] = reverse_str(s[i:i+k])
        return ''.join(s)

剑指 Offer 05. 替换空格

在这里插入图片描述

解法:python中比较骚的操作,分割后再拼接。

class Solution(object):
    def replaceSpace(self, s):
        """
        :type s: str
        :rtype: str
        """
        s = s.split(' ')
        print(s)
        return '%20'.join(s)

正经解法:首先扩充数组到每个空格替换成"%20"之后的大小。然后从后向前替换空格,也就是双指针法。

class Solution(object):
    def replaceSpace(self, s):
        """
        :type s: str
        :rtype: str
        """
        cnt = s.count(' ')
        res = [' '] * (len(s) + cnt*2)
        # res = list(s)
        # res.extend([' '] * cnt * 2)
        pointer1, pointer2 = len(s) - 1, len(res) - 1
        while pointer1 >= 0:
            if s[pointer1] == " ":
                res[pointer2-2:pointer2+1] = '%20'
                pointer2 -= 3
            else:
                res[pointer2] = s[pointer1]
                pointer2 -= 1
            pointer1 -= 1
        return ''.join(res)

剑指 Offer 58 - II. 左旋转字符串

在这里插入图片描述

解法:python总有一些骚操作。。(切片)

class Solution(object):
    def reverseLeftWords(self, s, n):
        """
        :type s: str
        :type n: int
        :rtype: str
        """
        return s[n:] + s[:n]

解法:局部反转+整体反转

class Solution(object):
    def reverseLeftWords(self, s, n):
        """
        :type s: str
        :type n: int
        :rtype: str
        """
        s = list(s)
        s[0:n] = list(reversed(s[0:n]))
        s[n:] = list(reversed(s[n:]))
        s.reverse()
        
        return "".join(s)
        

解法:取模

class Solution(object):
    def reverseLeftWords(self, s, n):
        """
        :type s: str
        :type n: int
        :rtype: str
        """
        new_str = ''
        for i in range(len(s)):
            j = (i + n) % len(s)
            new_str += s[j]
        return new_str

151. 反转字符串中的单词

在这里插入图片描述

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        def strip_space(t):
            n = len(t) - 1
            left, right = 0, n
            # 去除两边空格
            # t.strip()
            while left <= right and t[right] == ' ':
                right -= 1
            while left <= right and t[left] == ' ':
                left += 1
            
            tmp = []
            # 去除单词之间多余的空格
            while left <= right:
                if t[left] != ' ':
                    tmp.append(t[left])
                elif t[left] == ' ' and tmp[-1] != ' ':
                    tmp.append(t[left])
                left += 1
            return tmp

        def reverse_string(nums, left, right):
            while left < right:
                nums[left], nums[right] = nums[right], nums[left]
                left += 1
                right -= 1
        
        def reverse_word(t):
            start, end = 0, 0
            n = len(t)
            while start < n:
                while end < n and t[end] != ' ':
                    end += 1
                reverse_string(t, start, end-1)
                start = end + 1
                end += 1
        
        res = strip_space(list(s)) 
        reverse_string(res, 0, len(res) - 1)
        reverse_word(res)
        return ''.join(res)

            


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Day07 字符串 的相关文章

随机推荐

  • 初次在idea运行ssm框架项目

    JDK 8 Tomcat 8 Maven 最新的 配环境变量 Git IDEA 安装 陪环境 编码 UTF 8 快捷方式 把自己安装的JDK Tomcat Maven git配置到IDEA中 自己下一些插件 从GitHub上倒入项目 Mav
  • 概率论与数理统计——方差分析

    文章目录 单因素试验的方差分析 单因素试验 双因素试验的方差分析 方差分析是数理统计中应用很广泛的内容 主要看两个 单因素试验的方差分析 双因素试验的方差分析 在这之前先了解几个概念 方差分析 根据试验的结果进行分析 鉴别各个有关因素对试验
  • ERP财务基础学习

    总账的账套包括会计期间 会计科目和本位币的定义 会计期间 Accounting Period Fiscal Period 又称会计分期 是指将企业川流不息的经营活动划分为若干个相等的区间 在连续反映的基础上 分期进行会计核算和编制会计报表
  • Linux定时任务-定时执行Shell脚本

    主要是使用Linux的crontab工具来实现的 有两个方法 一个放在contab 列表里面 另一个是放在contab文件里面 其实原理是一致的 crontab 列表 cd tmp 创建一个shell脚本 vim hello sh bin
  • ABAP动态编程-动态调用子例程&方法及动态SQL

    目录 前言 一 动态调用 1 1 FORM子例程的动态调用 1 2 ABAP方法动态调用 二 动态SQL 2 1 动态OPEN SQL语句 2 2 使用ADBC类执行SQL 总结 前言 本文主要讲述ABAP语言中FORM子例程 方法的动态调
  • element-ui 多选框和级联选择的部分bug以及解决方法

    前言 最近在开发一款使用了 element ui 的低代码设计器 在开发的过程当中碰到了一些关于 element ui 组件本身不合理的地方 并且在百度的基础上自己去阅读了一下 element ui 的源码 也找出了这些问题的一个解决方案
  • EDA虚拟机安装 plus

    EDA虚拟机安装 plus 申明 此工具为学生或者初学者学习只用 严谨用于商业用途 请支持知识产权 购买正版EDA工具 之前刚安装了一个虚拟机 详见 EDA大礼包 本想将之前的开源NanGate 45nmPDK用于后端实现 但找到的库全部基
  • R中Matrix and TMB package version issues

    在Rstudio中常遇到Matrix and TMB包版本的问题 或者是其他类似的问题 Warning message In checkMatrixPackageVersion Package version inconsistency d
  • SSM项目-在线考试系统的Java毕业设计(附论文+源码)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 Java毕业设计 精彩专栏推荐 安卓app毕业设计 微信小程序毕业设计 演示视频 ssm061在线考试系统 源码下载地址 https download csdn net do
  • HTTP协议的基本概念与理解!

    一 什么是HTTP协议 HTTP 超文本传输协议 是一个基于请求与响应 无状态的 应用层的协议 常基于TCP IP协议传输数据 互联网上应用最为广泛的一种网络协议 所有的WWW文件都必须遵守这个标准 设计HTTP的初衷是为了提供一种发布和接
  • vue element的select下拉框赋值之后无法选择

    问题描述 用element的select下拉框之后 在回显后有初始值的情况下 不能修改 也不能选择 如图 明明点击了一般内勤主管 但没有任何反应
  • C语言:九九乘法表

    题目描述 已知九九乘法表 要求给定在1 9之间的整数n 输出该表的前n行 输入 包含多行 每行一个在1 9之间的整数n 输出 输出九九乘法表的前n行 include
  • springboot中,前端传时间戳后端用LocalDateTime接收

    问题 字符串 时间戳入参 后端LocalDateTime 单个时间戳入参 public class LocalDateTimeArgumentResolver implements HandlerMethodArgumentResolver
  • matlab 生成Blocks和Heavysine等典型非线性非平稳信号代码

    Blocks和Heavysine信号是典型的非线性非平稳信号 matlab生成blocks bumps和doppler标准测试信号 关键函数 wnoise 噪声小波检验数据 使用方式 x wnoise fun n x xn wnoise f
  • elementUI中el-table表格的表头样式错位

    版本 element ui 2 12 0 1 问题描述 使用elementUI的el table表格组件时 表格高度定高 内容过多时右侧会出现滚动条 然后就会出现如下图所示的列错位的样式 解决办法 在网上也找了好多方法 试了好多改CSS样式
  • CentOS7下载与安装MySQL5.7rpm包

    下载软件包等 创建目录 root mysql001 packages mkdir p opt packages mysql community 切换目录 root mysql001 packages cd opt packages 下载My
  • 解决Ubuntu18.04无法联网网络的问题

    在命令行运行以下3个命令 即可重新启动网卡 sudo service network manager stop sudo rm var lib NetworkManager NetworkManager state sudo service
  • cmd命令行运行Java文件产生乱码问题的解决方式

    1 第一种方式 改变记事本的编码集为ANSI cmd默认的编码格式是GBK 需要修改记事本的编码格式 记事本编码格式默认为UTF 8 把记事本编码格式改为ANSI 2 第二种方式 改变cmd编码集 javac encoding utf8 源
  • 怎么使用python进行回归分析

    转自 http www pinlue com article 2020 05 2215 3610586906023 html
  • Day07 字符串

    344 反转字符串 解法 二分法 思路比较加简单 class Solution object def reverseString self s type s List str rtype None Do not return anythin