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

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

时间:2023-12-20 22:27:09浏览次数:55  
标签:卡码 反转 复杂度 学习 字符串 翻转

一、344.反转字符串

题目链接:

LeetCode 344.反转字符串

学习前:

思路:

相向指针。left=0,right=length-1,不停交换left和right的值

时间复杂度:O(n)

空间复杂度:O(1)

学习后:

了解swap函数通过位运算实现的方式

二、541.反转字符串II

题目链接:

LeetCode 541.反转字符串II

学习前:

思路:

new一个char数组,存放反转后的字符串。运用双向指针反转每2k个字符的前k个,最后将char数组转成字符串输出

时间复杂度:O(n)

空间复杂度:O(n)

学习后:

  • 思路基本一致,抓住第k个和第2k个,但是我采用是char数组而不是StringBuffer,最后还要进行转换
  • 代码还能进一步优化,使得逻辑更加清晰

三、卡码网:54.替换数字

题目链接:

LeetCode 卡码网:54.替换数字

学习前:

思路:

创建StringBuffer对象,遍历字符串,是字母则直接追加,是数字则追加number

时间复杂度:O(n)

空间复杂度:O(1)

学习后:

复习

四、151.翻转字符串里的单词

题目链接:

LeetCode 151.翻转字符串里的单词

学习前:

思路:

在一个for循环中,从后往前遍历,在遇到非空格字符后遇到的第一个空格处,进行append操作,

但是对于边界处的判断总是出现问题

时间复杂度:O(n)

空间复杂度:O(1)

学习后:

  • 原本试图在一个循环里面解决问题,但是很容易有错误;并且对于边界处,需要在循环外面多进行一次判断
  • 采用分3步的思路,整体翻转+局部翻转,不仅简化了每一步的操作,还对前面所学的进行复习,层层递进

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

题目链接:

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

学习前:

思路:

  1. 首先整体翻转
  2. 前k个局部翻转
  3. 余下的局部翻转

时间复杂度:O(n)

空间复杂度:O(1)

学习后:

进一步掌握 整体翻转+局部翻转 的巧妙

六、学习总结

  1. 时间:3.5h
  2. 初步了解StringBuffer以及字符串的就地翻转
  3. 熟悉 整体先翻转再局部翻转 的思路

标签:卡码,反转,复杂度,学习,字符串,翻转
From: https://www.cnblogs.com/amulet/p/17917721.html

相关文章

  • 处理字符串的常用函数(来自AI)
    当涉及到C语言的字符串处理时,有很多函数可以使用。以下是一些常见的字符串处理函数的列表,以及简短的描述:1.**strlen:**返回字符串的长度。```csize_tstrlen(constchar*str);```2.**strcpy:**将一个字符串复制到另一个字符串。```cchar*strcpy(char*d......
  • 字符串属性和方法
    一、什么叫字符串?String(字符串)数据类型表示零或多个16位Unicode字符系列二、字符串的声明?使用双引号("")、单引号(’’)或反引号(`)标示。三、字符串的属性和方法1.属性length使用length属性可以获取字符串的长度conststr='abcdefg'str.length//7字符串虽然有长度,但是......
  • Oracle 截取指定字符串
    --INSTR定位指定字符串--第一次出现的位置3(没有的话返回0)SELECTINSTR('某某/123/abc','/',1)FROMDUAL;--从第四个位置开始第一次出现的位置7SELECTINSTR('某某/123/abc','/',4,1)FROMDUAL;--从右向左第一个字符开始第一次出现的位置7SELECTINSTR('某某......
  • 【C语言】结束符’\0‘ & gets()字符串输入函数
    ......
  • 【C语言】结束符"\0" & gets()字符串输入函数
    ......
  • 【重排链表】双指针+反转链表+合并链表
    leetcode143.重排链表题意:给定一个单链表L的头节点head,单链表L表示为:L0→L1→…→Ln-1→Ln请将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→…不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。题解:可以发现重新排列的链......
  • C练习——字符串逆序
    将“abcdefg”逆序注意题意是将字符串逆序,会对字符串本身进行操作,而不是单纯逆序打印方法一:非递归#include<stdio.h>#include<string.h>//将“abcdefg”逆序//注意题意是将字符串逆序,会对字符串本身进行操作,而不是单纯逆序打印voidreverse(chararr[]){intsz......
  • 代码随想录--字符串
    344.反转字符串https://leetcode.cn/problems/reverse-string/classSolution{public:voidreverseString(vector<char>&s){intsize=s.size();for(intj=size-1,i=0;i<size/2;j--,i++){swap(s[i],......
  • 【反转子链表】模拟题
    leetcode92.反转链表II题意:反转链表的[left,right],返回链表表头题解:直接模拟删除的过程即可定义重要节点记录left位置的节点为lnode,right位置的节点为rnodelnode的前驱节点为pre,right位置的后继节点为suc初始化pre=suc=lnode=rnode=原链表表头前的虚拟节点......
  • Java工具库中字符串判空方法知多少?各有什么区别?
    SpringFramework库在SpringBoot项目中,通常情况下,你不需要额外引入依赖来使用SpringFramework库中的常用工具方法,这是因为SpringBoot的起步依赖已经包含了SpringFramework的核心库,其中包括org.springframework.util包。这个用起来就很方便。在这里面有两个常用的方法:StringUtil......