【代码随想录】Day8&9字符串:力扣344,offer05,27,151,28,459

本文介绍了C++中处理字符串的一些常见方法,包括使用双指针法进行字符串反转,替换空格以及移除元素。具体涉及到力扣(LeetCode)上的相关题目,如反转字符串、替换空格、移除元素等操作,并提供了相应的解决方案和代码示例。
摘要由CSDN通过智能技术生成

字符串

定义

字符串是若干字符组成的有限序列;C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。

C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用'\0'来判断是否结束。

双指针法

在数组、链表、字符串中很常用

力扣344反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

力扣剑指Offer05替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
  1. 扩充数组到每个空格替换成"%20"之后的大小。

  1. 从后向前替换空格,也就是双指针法,i指向新长度的末尾,j指向旧长度的末尾。

力扣27移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。

  1. 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作

  1. 快指针:寻找新数组的元素,心数组就是不含有目标元素的数组;慢指针:更新新数组下标的位置

力扣151反转字符串里的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序
输入:s = "the sky is blue"
输出:"blue is sky the"
  1. 移除多余空格

  1. 将整个字符串反转

  1. 将每个单词反转

反转系列

力扣541反转字符串II

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

模拟:实现题目中规定的反转规则

在遍历字符串的过程中,让i+=(2*k),i每次移动2*k即可,然后判断是否需要有反转的区间。

力扣剑指Offer58左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
  1. 反转区间为前n的子串

  1. 反转区间为n到末尾的子串

  1. 反转整个字符串

KMP系列

算法还没有很好的掌握,感觉只是明白了其中部分原理。

力扣28实现 strStr()

实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

力扣459重复的子字符串

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值