代码随想录算法跟练 | Day8 | 字符串 Part01

个人博客主页:http://myblog.nxx.nx.cn
代码GitHub地址:https://github.com/nx-xn2002/Data_Structure.git

Day8

344. 反转字符串

题目链接:
https://leetcode.cn/problems/reverse-string/

题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

思路:
最简单的思路就是创建一个等长的数组,然后反向遍历原数组填入到新数组中,但本题要求是 O(1) 的额外空间,因此要考虑在原数组上进行修改,所以想到了使用前面学的双指针。通过头尾双指针向中间遍历,然后依次交换头尾指针指向的字符,即可做到字符串反转。

做这道题的时候还注意到了一个不使用额外的存储空间就可以进行两个变量的值的交换的写法,就是使用三次异或操作:

int a = 0,b = 1;
a ^= b;
b ^= a;
a ^= b;  //此时,a=1,b=0

代码实现:

class Solution {public void reverseString(char[] s) {int left = 0, right = s.length - 1;while (left < right) {s[left] ^= s[right];s[right] ^= s[left];s[left] ^= s[right];left++;right--;}}
}
  • 时间复杂度:O(N)
  • 空间复杂度:O(1)

541. 反转字符串 II

题目链接:
https://leetcode.cn/problems/reverse-string-ii/

题目描述:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

思路:
使用双重循环实现即可,外层循环确定反转的起始终止位置,内层循环进行反转操作。

代码实现:

class Solution {public String reverseStr(String s, int k) {char[] ch = s.toCharArray();for(int i = 0; i < ch.length; i += 2 * k){int start = i;int end = Math.min(ch.length - 1, start + k - 1);while(start < end){ch[start] ^= ch[end];ch[end] ^= ch[start];ch[start] ^= ch[end];start++;end--;}}return new String(ch);}
}
  • 时间复杂度:O(N^2)
  • 空间复杂度:O(N)

总结:
今天的题目大体上都是字符串中最基础的题型,熟练掌握前面学习的双指针就可以完成了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c库函数:strrchr使用demo案例

1. strrchr库函数说明 头文件 <string.h> 函数形式 char *strrchr( const char *str, int ch ); 功能 在str所指向的空终止字节串中寻找字符ch的最后出现。 参数 str - 指向要分析的空终止字节字符串的指针 ch - 要搜索的字符 返回值 指向 str 中找到的字符的…

Emacs之实现目录替换(一百四十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

vue 中监听生命周期事件

vue 中监听生命周期事件 常见的添加自定义事件的写法希望在子组件挂载时通知父组件在模板上监听组件生命周期vue3 有类似的写法吗&#xff1f;jsx 中如何监听 vue3 组件的生命周期事件呢&#xff1f; vue3 父组件组件的生命周期的执行顺序是什么&#xff1f;小结 vue2 提供了一…

边缘计算和云计算的区别

边缘计算和云计算是两种不同的计算范式&#xff0c;它们在数据处理、响应时间、网络带宽、安全性等方面有着显著的区别。下面分别介绍这两种计算方式的特点&#xff1a; ### 云计算&#xff08;Cloud Computing&#xff09; 云计算是一种通过互联网提供计算资源&#xff08;如服…

00 - React 基础

1. React 基础 JSX JSX 是一种 JavaScript 的语法扩展&#xff0c;类似于 XML 或 HTML&#xff0c;允许我们在 JavaScript 代码中编写 HTML。 const element <h1>Hello, world!</h1>;组件 组件是 React 应用的核心&#xff0c;可以是函数组件或类组件。 函数…

DataBase 的一些规范 ?

1命名规范 1.1表名要有业务意义 1.2避免使用关键字 mysql关键字 1.3库、表、字段全部采用小写 1.4命名&#xff08;包括表名、列名&#xff09;禁止超过 30 个字符 1.5临时库、表名必须以 tmp 为前缀&#xff0c;并以日期为后缀&#xff1b;如&#xff1a;tmp_shop_info_2…

如何在Java中进行单元测试:JUnit 5的使用指南

如何在Java中进行单元测试&#xff1a;JUnit 5的使用指南 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 单元测试是软件开发中的一个关键环节&#xff0c;它…

贪心算法练习题(2024/6/18)

什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 1分发饼干 假设你是一位很棒的家长&#xff0c…

pytest测试框架pytest-rerunfailures插件重试失败用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;介绍下插件pytest-rerunfailures &#xff0c;用于在测试用例失败时自动重新运行这些测试用例。 pytest-rerunfailures官方显示的python和pytest版本限制&#xff1a; Python 3.8pytest 7.2 或更新版本 此插件可以通过以下可…

Scala运算符及流程控制

Scala运算符及流程控制 文章目录 Scala运算符及流程控制写在前面运算符算数运算符关系运算符赋值运算符逻辑运算符位运算符运算符本质 流程控制分支控制单分支双分支多分支 循环控制for循环while循环循环中断嵌套循环 写在前面 操作系统&#xff1a;Windows10JDK版本&#xff…

1027. 方格取数

Powered by:NEFU AB-IN Link 文章目录 1027. 方格取数题意思路代码 1027. 方格取数 题意 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#xff0c;直到到达右下角的 B 点。 在走过的路上&#xff0c;他可以取走方格中的数&#xff08;取…

ESP32-C3模组上跑通NVS(7)

接前一篇文章:ESP32-C3模组上跑通NVS(6) 上一回讲到乐鑫技术支持发来了操作自定义NVS分区的代码。本回就对于代码进行详细解析,并通过此过程看一下具体应如何进行正确的操作。下边就开始代码分析: 主函数 主函数即app_main()代码如下: void app_main(void) {esp_err_t…

FOC方案大合集!

获取链接&#xff01;&#xff01;&#xff01; 本次小编给大家带来了一份FOC的方案大合集。此套方案是基于峰岹科技FU68系列MCU的系列方案&#xff0c;包含常用的无感&#xff0c;有感无刷电机的应用&#xff0c;每份方案都包含了原理图&#xff0c;PCB&#xff0c;代码文件&…

【TOOL】ceres学习笔记(一) —— 教程练习

文章目录 一、Ceres Solver 介绍二、Ceres 使用基本步骤1. 构建最小二乘问题2. 求解最小二乘问题 三、使用案例1. Ceres Helloworld2. Powell’s Function3. Curve Fitting4. Robust Curve Fitting 一、Ceres Solver 介绍 Ceres-solver 是由Google开发的开源C库&#xff0c;用…

2024年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题是由安全生产模拟考试一点通提供&#xff0c;P气瓶充装证模拟考试题库是根据P气瓶充装最新版教材&#xff0c;P气瓶充装大纲整理而成&#xff08;含2024年P气瓶…

[Open-source tool]Uptime-kuma的簡介和安裝於Ubuntu 22.04系統

[Uptime Kuma]How to Monitor Mqtt Broker and Send Status to Line Notify Uptime-kuma 是一個基於Node.js的開軟軟體&#xff0c;同時也是一套應用於網路監控的開源軟體&#xff0c;其利用瀏覽器呈現直觀的使用者介面&#xff0c;如圖一所示&#xff0c;其讓使用者可監控各種…

vue3父组件获取子组件的实例对象

一&#xff0c;ref 在父组件的模板里&#xff0c;对子组件的标签定义ref属性&#xff0c;并且设置属性值&#xff0c;在方法里获取ref()获取实例对象。 父组件&#xff1a; <template><div ><div>我是父组件</div><<SonCom ref"sonComRe…

Oracle中生僻汉字的解决办法

在Oracle数据库中处理生僻汉字时&#xff0c;主要面临的问题是某些字符集可能无法完全支持所有的汉字&#xff0c;特别是生僻字。以下是一些解决Oracle中生僻汉字问题的办法&#xff1a; 检查当前字符集&#xff1a; 使用SELECT USERENV(language) FROM dual;命令来查看当前数…

jlink使用记录

https://www.eet-china.com/mp/a79854.html Jlink使用技巧之读取STM32内部的程序stm32芯片解除写保护方法&#xff08;详细&#xff09;_stm32进入写保护如何用segger恢复-CSDN博客 stm32芯片解除写保护方法&#xff08;详细&#xff09; keil程序和jlink两种ccs使用Jlink调试时…

足底筋膜炎的症状

足底筋膜炎是足底的肌腱或者筋膜发生无菌性炎症所致&#xff0c;其症状主要包括&#xff1a; 1、疼痛&#xff1a;这是足底筋膜炎最常见和突出的症状。疼痛通常出现在足跟或足底近足跟处&#xff0c;有时压痛较剧烈且持续存在。晨起时或长时间不活动后&#xff0c;疼痛感觉尤为…