代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网:55.右旋转字符串

编程语言的未来走向:趋势、挑战与机遇 同时,鼓励他们接触和掌握一些专业领域的开发工具和技术框架,比如Web开发中的JavaScript、React.js,数据分析的Python(Pandas, NumPy, Matplotlib等),以及人工智能和机器学习领域的TensorFlow、PyTorch等。当前,全球范围内正积极推动编程教育的普及化,从儿童启蒙阶段到高等教育阶段,乃至终身学习的过程中,如何优化编程语言的教学方法、提高教学质量,并将其广泛应用于不同领域,是教育者与政策制定者面临的重大课题。未来,编程语言的多样化和包容性将会继续加强。 阅读详情


前言

讲解链接

344.反转字符串

在这里插入图片描述

思路 双指针

讲解:反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。
如果是c++,可以用库函数reverse()函数,也可以用swap函数来交换两个数,但是本题肯定是不希望使用库函数,肯定是想让大家了解库函数的内部实现。

本题正式解体思路和我自己的思路一样,很简单;
使用左右双指针:都是从最左边最右边开始同时往中间移动;
边界情况:是<n//2还是<=n//2,代入检验就行
【到这里要学会了快速检验;例如长度为4,n//2为2,肯定是<;如果是5的话,也是截止到1的index,所以<】

python交换位置的方法

  1. 使用元组交换:a, b = b, a

自己写的小细节:
3.

方法一 双指针

"""
我自己写的,元组交换
"""
class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """
        n = len(s)
        left, right = 0, n-1
        while left < n//2 :
            s[left],s[right] = s[right],s[left]
            left += 1
            right -= 1
        
        return s

方法二 使用栈、slice、reverse、reversed等

但是我觉得这个方法多了一个栈,需要多开辟一个空间,但是速度快

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        stack = []
        for char in s:
            stack.append(char)
        for i in range(len(s)):
            s[i] = stack.pop()

调用函数使用slice切片、reverse、reversed

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s[:] = s[::-1]
        
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        # 原地反转,无返回值
        s.reverse()

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s[:] = reversed(s)
# 列表推导
s[:] = [s[i] for i in range(len(s) - 1, -1, -1)]
# range
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        n = len(s)
        for i in range(n // 2):
            s[i], s[n - i - 1] = s[n - i - 1], s[i]

541. 反转字符串II

在这里插入图片描述

思路

核心想法:for循环的时候每一次迭代都是2k来进行迭代,i += (2 * k);而不是习惯性的i++,然后再判断是否有需要翻转的区间;
主要思路:固定i,判断i+k是否存在,存在就翻转,不存在就有多少翻多少
注意小细节:

  1. 一般库函数中的reverse都是左闭右开
  2. 翻转的时候,传入数组s,起始index
  3. 注意边界:(仍然是代入检验)i+k是<还是<=numsize?A:因为是左闭右开,所以包括=

在这里插入图片描述

方法一 自己写的

直接参考后面的,自己写的修修补补
自己写的注意点

  1. python数组一段进行reverse函数的实现:我是额外写的一个使用range的reverse函数

  2. python的slice是n[start:stop:step]但是注意不到stop,别忘了。。🧁

  3. 定义函数的时候不要写出这种错误啊:def reverse1(self,s,i,i+k):很离谱的。。。。k是哪来的??应该是def reverse1(self,s,i,k)==

  4. 报错:是因为python不可以直接处理字符串,不可以改动,要转换成list(S),最后return ‘’.join(S)才可以

    在这里插入图片描述
    5. 用了while之后每一种情况都需要加i+= 2k,我一开始continue忘记写了

class Solution(object):

    def reverse1(self,s,i,k):
        s[i:k] = [s[j] for j in range(k-1,i-1,-1)]

    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        n = len(s)
        i = 0
        s = list(s)
        while i < n:
            # 判断i+k的情况
            if i+k <= n:
                self.reverse1(s,i,i+k)
                i += 2*k #莫要漏了
                continue #第二种情况,有k个字符串,满足了就进入下一个循环
            #如果i+k超过范围了,就直接倒
            self.reverse1(s,i,n)
            i += 2*k
        return ''.join(s)

方法二 参考代码-多学习

第一种:利用双指针;最重要的是超过的切片python会返回最大长度,不用担心边界条件,艹;
对于字符串s = ‘abc’,如果使用s[0:999] ===> ‘abc’。字符串末尾如果超过最大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理。

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        """
        1. 使用range(start, end, step)来确定需要调换的初始位置
        2. 对于字符串s = 'abc',如果使用s[0:999] ===> 'abc'。字符串末尾如果超过最大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理。
        3. 用切片整体替换,而不是一个个替换.
        """
        def reverse_substring(text):
            left, right = 0, len(text) - 1
            while left < right:
                text[left], text[right] = text[right], text[left]
                left += 1
                right -= 1
            return text
        
        res = list(s)

        for cur in range(0, len(s), 2 * k):
            res[cur: cur + k] = reverse_substring(res[cur: cur + k])
        
        return ''.join(res)

第二种:代码很简洁,只需要把中间一段[::-1]就行,天才!

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

卡码网:54.替换数字

题目链接
在这里插入图片描述

思路

本题针对c++语言才有意义,python完全没有用,python太好写了;我已经在考虑改语言了。啊好烦;

方法一

python就很简单,注意判断语句**isdigit()**背诵一下就行
或者用s[i] >= ‘0’ && s[i] <= '9’也可以(python加个ord,我这是扣的c++代码)

class Solution:
    def change(self, s):
        lst = list(s) # Python里面的string也是不可改的,所以也是需要额外空间的。空间复杂度:O(n)。
        for i in range(len(lst)):
            if lst[i].isdigit():
                lst[i] = "number"
        return ''.join(lst)

方法二 c++

c++写的话,需要扩容所以总体思路为:
首先判断有多少数字,计算扩容之后的数组空间大小之后,使用双指针从后往前填充,很巧妙!!
在这里插入图片描述

#include <iostream>
using namespace std;
int main() {
    string s;
    while (cin >> s) {
        int sOldIndex = s.size() - 1;
        int count = 0; // 统计数字的个数
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                count++;
            }
        }
        // 扩充字符串s的大小,也就是将每个数字替换成"number"之后的大小
        s.resize(s.size() + count * 5);
        int sNewIndex = s.size() - 1;
        // 从后往前将数字替换为"number"
        while (sOldIndex >= 0) {
            if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
                s[sNewIndex--] = 'r';
                s[sNewIndex--] = 'e';
                s[sNewIndex--] = 'b';
                s[sNewIndex--] = 'm';
                s[sNewIndex--] = 'u';
                s[sNewIndex--] = 'n';
            } else {
                s[sNewIndex--] = s[sOldIndex];
            }
            sOldIndex--;
        }
        cout << s << endl;       
    }
}

拓展 c++

在这里插入图片描述
在这里插入图片描述

151.翻转字符串里的单词

在这里插入图片描述

思路

读题尤其注意:单词之间可能会有多个空格的,需要变成一个空格
简单方法:

  1. 空间复杂度不为O(1)也就是创建一个新的数组,失去了这道题目的意义
  2. 调用库函数:比如使用split,然后concat使用‘ ’,也可以不用
  3. 使用erase来删除空格:也不,因为erase删除的时间复杂度为O(n)

总体思路:首先使用快慢指针将多余的空格去掉,然后先先总体reverse之后再对单个字母reverse,得到我们想要的结果

举个例子,源字符串为:"the sky is blue "
移除多余空格 : “the sky is blue”
字符串反转:“eulb si yks eht”
单词反转:“blue is sky the”
在这里插入图片描述

方法一: 针对python

class Solution:
    def reverseWords(self, s: str) -> str:
        # 删除前后空白
        s = s.strip()
        # 反转整个字符串
        s = s[::-1]
        # 将字符串拆分为单词,并反转每个单词
        s = ' '.join(word[::-1] for word in s.split())
        return s

使用双指针

class Solution:
    def reverseWords(self, s: str) -> str:
        # 将字符串拆分为单词,即转换成列表类型
        words = s.split()

        # 反转单词
        left, right = 0, len(words) - 1
        while left < right:
            words[left], words[right] = words[right], words[left]
            left += 1
            right -= 1

        # 将列表转换成字符串
        return " ".join(words)

方法二 按照讲解的来

因为python的for语句执行逻辑是:无论如何处理fast指针,只要到for语句,它都是一个一个往后移动;比如说我已经处理到3了,过了一下for,又从1开始。
所以讲解完全不能用;不写了,根本没时间。
python还有一个限制是,没有resize,去除空格之后多余的部分删除不了
会出现下面的结果
在这里插入图片描述

class Solution(object):
    def reverse1(self,s,i,k):
        s[i:k] = [s[j] for j in range(k-1,i-1,-1)]
    def removeExtraSpaces(self,s):
        slow, fast = 0, 0
        # for fast in range(0,len(s)):#绝对不能用for,python里面for会一个一个加的
        while fast < len(s):

            if s[fast] != ' ':
                if slow !=0:#手动给单词开头加空格
                    s[slow] = ' '
                    slow += 1

                while fast < len(s) and s[fast] != ' ':
                    # print("slow "+s[slow]+" "+str(slow))
                    s[slow] = s[fast]
                    fast += 1
                    slow += 1
            else:
                fast += 1

    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        s = list(s)
        n = len(s)
        self.removeExtraSpaces(s)
        print(s)
        self.reverse1(s,0,n)
        #下面开始翻转单个字符,也是使用双指针的方法
        start = 0#慢指针
        for i in range(0,n+1): #左闭右开
            if i == n or s[i] == ' ':#如果到最后了或者是空格,说明可以翻转了
                self.reverse1(s,start,i)
                start = i + 1
        print(s)
        return s

卡码网:55.右旋转字符串

在这里插入图片描述

思路

使用整体反转+局部反转就可以实现反转单词顺序的目的
首先整体翻转一下,然后将两个部分分别翻转就可以得到想要的结果【不懂看讲解】
卡码网的代码需要自己写输入输出,海康的题目就是这样的🥚
自己写的错误:记得输入的k要加一个int

#获取输入的数字k和字符串
k = int(input())
s = input()

#通过切片反转第一段和第二段字符串
#注意:python中字符串是不可变的,所以也需要额外空间
s = s[len(s)-k:] + s[:len(s)-k]
print(s)

总结

c++和python还是差太多了,空间分配不一样,二刷一定要用c++,一刷了解算法思想

3D高斯泼溅实战:如何用自采数据集训练出高质量3D模型(附COLMAP避坑指南) 本文详细介绍了使用自采数据集训练高质量3D高斯泼溅模型的完整实战流程。从数据采集规范、COLMAP稀疏重建的深度配置与避坑指南,到数据格式转换及3DGS训练调优策略,提供了针对自采数据的关键参数调整与问题排查方案,帮助读者高效构建专属3D场景。 阅读详情

相关推荐

避开STM32H7的‘保护陷阱’:从Option Byte机制深度解析读写保护原理与预防

本文深度解析STM32H723VGT6的Option Byte保护机制,详细讲解RDP读保护和WRP写保护的工作原理及配置方法,并提供硬件设计防御策略和软件预防性编程技巧,帮助开发者避免误触发保护机制导致芯片锁定的问题。

weixin_33686714的博客 441

代码随想录算法训练营第8天|● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字● 151.翻转字符串里的单词● 卡码网:55.右旋转字符串

思路:每次处理的数组可以看作区间大小为2k的子数组,则每次for前进以2k大小前进,题目虽然给了3个反转条件,可以整理下1.若有2k个字符,反转前k个 2.若剩下字符小于2k且大于等于k,则反转前k个 3.若剩下字符小于k个,反转剩下的;删除空格的另外一个解法利用erase函数删除,由于数组元素是不能删除的,只能覆盖,所以该函数时间复杂度O(n),又因为该函数外套了层for循环(需要一个一个找空格),所以整体的时间复杂度会是O(如图:例s.begin()+0,s.begin()+2。

weixin_54583561的博客 1803

使用LaTex写IEEE trans 论文的参考文献(bib)

(1)在.TeX文件的最下方添加这几行内容,主要为生成tran形式的参考文献,第二行为参考文献名称,我命名为reference.bib,所以写的是reference,要根据自己的命名改写。(5)如果要在文中引用的话,就在.tex文件中添加\cite{},中括号里面内容为方框圈出来部分,但引用之后,在参考文献后面会出现[1]这样的标识,不知道为什么。(4)完成(3)以后,点击工具-命令-LaTeX,编译,然后按照此步骤LaTeX-bibtex-LaTeX-LaTeX,就可以完成参考文献的导入。

qq_45884215的博客 6258

代码随想录算法训练营第8天|● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字● 151.翻转字符串里的单词● 卡码网:55.右旋转字符串

题目链接视屏链接思路:利用双指针,一个在字符串头部,一个在字符串尾部,依次对指针指向的字符进行交换,然后移动指针。

weixin_74408291的博客 747

USB3.0/3.1信号完整性分析仿真

• 1.了解USB3.0通路的互连关系,解读原理图接口电路和PCB的互连电路。对USB布线的通路及阻抗进行检查和分析。 • 2.使用USB3.0实例文件提取互连线的S参数,选择SSRX+,SSRX-,SSTX+,SSTX-,D+,D-组的互连线,使用PowerSI,Clarity,3DFEM等工具提起关键网络的S参数。提取S参数以后需要分析S参数的互连特征,对S参数的结果开展评价。 • 3.使用SYSTEM SI USB3 Compliance工程向导模型,建立USB仿真实例框架,在框架BOLCK中带入S参

小猪配齐电子设计 1万+

嵌入式软件面试常见问题及答案

干了多年的嵌入式,被面试过,也面过不少新人,下面这些是面试中很常见的一些问题及答案,答案可以根据自己的经验自己思考下。--持续补充并更新

weixin_37553721的博客 6023

代码随想录算法训练营第8天|● 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网:55.右旋转字符串

简单编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]

嗝~~~~的博客 200

Oracle数据库RMAN异机恢复保姆级教程,按照步骤来操作,一次就成功!

本文深入解析RMAN异机恢复四大核心场景(演练、数据恢复、故障应急、测试环境搭建),提供从备份到验证的完整步骤和实战脚本。包含RAC到单机迁移技巧、路径调整、常见报错解决方案,助你彻底掌握数据库恢复的“救命技能”。DBA必备干货,强烈推荐

Jackyimi的博客 940

【代码随想录算法训练营第八天 | LeetCode344.反转字符串、 541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串】

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

cattte的博客 957

ElaticSearchUtil工具类封装

package com.xxx.util; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction; import org.elasticsearch.action.ad

会飞的狼 6295

基于YOLO26的实时目标追踪实战:从训练到视频追踪(附完整可视化代码)

核心组合:YOLO26(高精度检测)+ ByteTrack(稳定追踪)是实时目标追踪的最优工业组合,Ultralytics内置集成无需额外开发;训练优化:追踪场景需优先提升检测框精度(增加box损失权重),保证ID稳定性;可视化核心:为每个ID分配唯一颜色、绘制运动轨迹、显示FPS,是落地场景的必备功能;性能调优:轻量化模型+降分辨率+OpenVINO导出,可在边缘设备(如研华工控机)实现实时追踪。这套代码可直接复用到智慧园区、停车场、工业产线等场景,仅需修改park.yaml中的类别和。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 572

【代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串】

本文的思路和代码大部分来自:1.《代码随想录》:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html#%E6%80%9D%E8%B7%AF2. y总的acwing:https://www.acwing.com。

qq_44810048的博客 1010

YOLOv11 改进入门篇 | 从原理到代码:CBAM 注意力模块的插入与涨点验证

本文介绍了如何在YOLOv11模型中插入CBAM注意力模块以提升检测性能。CBAM包含通道和空间注意力两个子模块,通过双池化操作和MLP学习特征权重。文章详细解析了CBAM原理,提供了PyTorch实现代码,并建议在YOLOv11的Stage-3和Stage-4之间插入CBAM。实验表明,该方法在COCO数据集上使nano和small模型的mAP提升1.7-2.3个百分点,参数量仅增加0.27%,推理延迟增加0.1ms。最后给出了插入位置选择、通道缩减比等调优建议,验证了CBAM作为轻量级注意力模块的有效性

shrgegrb的博客 1301

代码随想录算法训练营第八天(字符串part01) | 344.反转字符串,541. 反转字符串II,卡码网:54.替换数字,151.翻转字符串里的单词,卡码网:55.右旋转字符串

1.索引越界:确保 right 初始化为len(s) - 1,防止初始值超出字符串范围。2.循环条件错误:循环条件应该是while left < right,而不是

dianzi_233的博客 2334

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

我的思路是把字符串长度先和2k进行取余的操作,得到前面的整数段和后面的小段,对前面的整数段使用for循环,步长是2k,在每一次循环中对前k个元素进行反转。建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。我的一坨,直接看链接吧。

m0_73184000的博客 1202

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【代码随想录算法训练营Day08】转字符串; 541. 反转字符串II; 卡码网:54.替换数字; 151.翻转字符串里的单词; 卡码网:55.右旋转字符串

for循环内不要直接写i++,写成i+=2k,这样一次操作2k个字符就很方便。先把s分成几个长度为2k的字符串,然后进行交换。返回字符的字符串形式,字符串的长度仅为1。:在文中该处插入一个tab键。:在文中该处插入一个后退键。:在文中该处插入换页符。:在文中该处插入单引号。:在文中该处插入双引号。:在文中该处插入反斜杠。双指针不断往中间移动。:在文中该处插入回车。

Tammy2001的博客 1062

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

代码随想录算法训练营Day8 | ● 344.反转字符串● 541. 反转字符串II● 54.替换数字● 151.翻转字符串里的单词● 55.右旋转字符串

这段代码利用了双指针的思想,从字符串的两端开始,逐步向中间移动,交换对应位置上的字符,从而实现了字符串的翻转。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。在确定了要反转的子字符串的起始和结束位置之后,使用双指针法对该子字符串进行反转操作。解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]输入:["h","e","l","l","o"]

2201_75378283的博客 1324

代码随想录算法训练营第九天 |●151.翻转字符串里的单词 ●卡码网:55.右旋转字符串 ●28. 实现 strStr() ●459.重复的子字符串

比较简单,大家读一遍就行题目链接/文章讲解:https://programmercarl.com/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%80%BB%E7%BB%93.html。

2301_80094768的博客 936

代码随想录算法训练营第8天|字符串1 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串

其实在遍历字符串的过程中,当需要固定规律一段一段去处理字符串的时候,不一定要i++这种,可以让,i 每次移动2 * k就可以了,然后判断是否需要有反转的区间。因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。reserve()函数左闭右开,注意边界的处理。i+=2*k){// 1. 剩余字符小于 2k;2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。}else{// 3. 如果剩余字符少于 k 个,则将剩余字符全部反转。

weixin_46743838的博客 1334

代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串(JS写法)

题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html方法一:双指针注意:本题一开始声明了s如下,即,因此可以直接对其进行修改,如果声明s是字符串,即string,则。

weixin_44776979的博客 1665

代码随想录算法训练营第8天 | 344.反转字符串 + 541. 反转字符串II + 卡码网:54.替换数字 + 151.翻转字符串里的单词 + 卡码网:55.右旋转字符串

翻转字符串里的单词代码还是不太熟练,其余思路还可以。

weixin_52443257的博客 910

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

今天的题目写了很久。特别是翻转字符串里的单词这题,想了一两个小时,一直在试,后面实在是不行了,就去看了视频和文章讲解,一起来看今天的题目吧!344.反转字符串。

2401_82757749的博客 1345

代码随想录算法训练营第八天 | LeetCode344.反转字符串、541. 反转字符串II、卡码网:54. 替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

今天主要学习了字符串的一些常规操作以及双指针在字符串中的应用,同时体会了多重翻转的妙用。

qq_64336203的博客 1786

代码随想录算法训练营第8天 |344.反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串

比较基础的一道题,用双指针可以解决。i每次移动2k,可以更好的将每个2k进行分组,之后对组内确定start和end点,之后使用交换函数来解决。将题目拆分,分为几步,之后每步分别解决。解决字符串方面的题,经常会使用StringBuilder。从文件或者键盘输入较短的单词,构建成较长的字符串,采用字符串拼接的方式效率较低。每次连接字符串,都会构建一个新的String对象,耗时且浪费空间。StringBuilder类可以避免这个问题的发生。

Laulian的博客 791

代码随想录算法训练营|Day8 字符串 344反转字符串 541反转字符串2 151 翻转字符串里的单词

交换元素不同的语言不一样。541. 反转字符串II建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。代码随想录力扣题目链接(opens new window)给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

luyimin87的博客 1202

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

思路:最简单的方法就是直接调用库函数reverse,当然,这里也可以用双指针法:对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。思路:最简单的是创建新字符串,遍历原字符串,将原字符串的字母拼接到新字符串中,若遇到数字,拼接“number";字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

qq_60513199的博客 760
上一篇: 代码随想录算法训练营第7天 |● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
下一篇: 代码随想录算法训练营第9天| kmp算法
Xalileetcode
博客等级 码龄7年 482粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值