代码随想录 字符串

344.反转字符串

344. 反转字符串

简单

提示

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符
class Solution {public void reverseString(char[] s) {int left = 0;int right = s.length - 1;while(left < right){char temp = s[left];s[left++] = s[right];s[right--] = temp;}}
}

简单的双指针

541.翻转字符串II

541. 反转字符串 II

简单

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

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

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104

重点在于left和right指针的位置

class Solution {// 定义一个方法,接收一个字符串s和一个整数k作为参数public String reverseStr(String s, int k) {// 将字符串s转换为字符数组arrchar[] arr = s.toCharArray();// 遍历字符数组arr,步长为2 * kfor(int i = 0;i < arr.length;i += 2 * k){// 初始化左指针left为当前索引iint left = i;// 判断尾数够不够k个来取决end指针的位置int right = Math.min(arr.length - 1,left + k - 1);// 当左指针小于右指针时,执行循环while(left < right){// 交换左右指针所指向的字符char temp = arr[left];arr[left++] = arr[right];arr[right--] = temp;}}// 将字符数组arr转换为字符串并返回return new String(arr);}
}

151.反转字符串中的单词

151. 反转字符串中的单词

中等

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

示例 2:

输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示:

  • 1 <= s.length <= 104
  • s 包含英文大小写字母、数字和空格 ' '
  • s 中 至少存在一个 单词

进阶:如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1) 额外空间复杂度的 原地 解法。

class Solution {// 反转字符串的方法public String reverseString(String str) {char[] s = str.toCharArray();int left = 0;int right = s.length - 1;while(left < right){char temp = s[left];s[left++] = s[right];s[right--] = temp;}return new String(s);}// 反转单词的方法public String reverseWords(String s) {s = reverseString(s); // 先反转整个字符串StringBuilder builder = new StringBuilder(); // 创建一个StringBuilder对象,用于存储反转后的单词char[] arr = s.toCharArray(); // 将字符串转换为字符数组int left = 0; // 初始化左指针while(left < arr.length  && arr[left] == ' '){ // 跳过字符串开头的空格left++;}int right = left; // 初始化右指针for(;right < arr.length; right++){ // 遍历字符数组if(arr[right] == ' '){ // 如果遇到空格,说明一个单词结束String temp = new String(arr,left,right - left); // 截取单词builder.append(reverseString(temp) + " "); // 反转单词并添加到StringBuilder中left = right; // 更新左指针while(left < arr.length && arr[left] == ' '){ // 跳过单词之间的空格left++;right++;}}if(right == arr.length - 1 && arr[right] != ' '){ // 如果到达字符串末尾且最后一个字符不是空格,说明还有一个单词没有处理String temp = new String(arr,left,right - left + 1); // 截取最后一个单词builder.append(reverseString(temp) + " "); // 反转单词并添加到StringBuilder中break;}}builder.deleteCharAt(builder.length() - 1); // 删除最后一个多余的空格return builder.toString(); // 返回反转后的单词字符串}
}

28.找出字符串中第一个匹配项的下标

KMP算法-CSDN博客

459.重复的子字符串

459. 重复的子字符串

已解答

简单

相关标签

相关企业

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

示例 1:

输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。

示例 2:

输入: s = "aba"
输出: false

示例 3:

输入: s = "abcabcabcabc"
输出: true
解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)

提示:

  • 1 <= s.length <= 104
  • s 由小写英文字母组成
class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;int len = s.length();// 原串加个空格(哨兵),使下标从1开始,这样j从0开始,也不用初始化了s = " " + s;char[] chars = s.toCharArray();int[] next = new int[len + 1];// 构造 next 数组过程,j从0开始(空格),i从2开始for (int i = 2, j = 0; i <= len; i++) {// 匹配不成功,j回到前一位置 next 数组所对应的值while (j > 0 && chars[i] != chars[j + 1]) j = next[j];// 匹配成功,j往后移if (chars[i] == chars[j + 1]) j++;// 更新 next 数组的值next[i] = j;}// 最后判断是否是重复的子字符串,这里 next[len] 即代表next数组末尾的值if (next[len] > 0 && len % (len - next[len]) == 0) {return true;}return false;}
}

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

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

相关文章

解析七人拼团,一人出局:社交电商的新玩法

每天五分钟讲解一个电商模式&#xff0c;大家好我是模式策划啊浩Zeropan_HH 在当今的社交电商时代&#xff0c;各种创新的营销策略层出不穷。其中&#xff0c;“七人拼团&#xff0c;一人出局”的玩法在近年来逐渐崭露头角&#xff0c;成为一种颇受欢迎的营销模式。那么&#…

stm32---输入捕获实验实操(巨详细)

这次来分享上次没说完的输入捕获的知识点 实验中用到两个引脚&#xff0c;一个是通用定时器 TIM3 的通道 1&#xff0c;即 PA6&#xff0c;用于输出 PWM 信号&#xff0c;另一 个是高级控制定时器 TIM1 的通道 1&#xff0c;即 PA8&#xff0c;用于 PWM 输入捕获&#xff0c;实…

vue3 生命周期

与 2.x 版本生命周期相对应的组合式 API beforeCreate -> 使用 setup() created -> 使用 setup() beforeMount -> onBeforeMount mounted -> onMounted beforeUpdate -> onBeforeUpdate updated -> onUpdated beforeDestroy -> onBeforeUnmount destroye…

服务器新创建账号并设置密码与用户权限

1、创建用户&#xff1a; 在root权限下&#xff0c;输入命令useradd -m 用户名&#xff0c;如下 sudo useradd -m love2、设置密码&#xff1a; 输入命令passwd 用户名 回车&#xff0c;接着输入密码操作&#xff0c;需输入两次 sudo password good9993、给用户设置最高权限&…

海外動態IP與海外靜態IP的區別詳解 - okey proxy

根據分配方式的不同&#xff0c;IP地址可以分為靜態IP和動態IP。那麼&#xff0c;海外動態IP和海外靜態IP又有什麼區別呢&#xff1f;本文將詳細解析。 海外動態IP是什麼&#xff1f; 海外動態IP是動態分配的海外IP地址。每次用戶上網時&#xff0c;都會從服務提供商的IP地址池…

window中安装Apache http server(httpd-2.4.58-win64-VS17)

windows中安装Apache http server(httpd-2.4.58-win64-VS17) 1、下载windows版本的的httpd, https://httpd.apache.org/docs/current/platform/windows.html#down 这里选择的是Apache Lounge编译的版本 https://www.apachelounge.com/download/ 2、解压到指定目录&#xff0c;这…

python函数装饰器参数统计调用时间和次数

1 python函数装饰器参数统计调用时间和次数 python在函数装饰器外层定义一个函数生成封闭作用域来保存装饰器入参&#xff0c;供装饰器使用。 1.1 装饰器统计调用时间和次数 描述 通过类的可调用实例装饰器来统计函数每次调用时间和总调用时间&#xff0c;以及调用次数。 …

C#写windows服务,实现把检测软件崩溃工具写成服务 自动运行

一、打开Visual Studio&#xff0c;创建项目->Windows 服务(.NET Framework) 二、点击Service.cs 点击切换到代码视图 static Timer Timer; private Thread monitorThread; private static string logFilePath; private static Process winFormsProcess; public Service1(…

如何修复DLL错误或丢失的问题,这里提供几种方法

DLL错误是指DLL文件的任何错误&#xff0c;一种以.dll文件扩展名结尾的文件。 DLL错误可能出现在微软的任何操作系统中&#xff0c;包括Windows 10、Windows 8、Windows 7、Windows Vista和Windows XP。 DLL错误尤其麻烦&#xff0c;因为存在许多这样类型的文件&#xff0c;所…

obgs格式能通过Dasviewer导入到Revit吗?

答&#xff1a;Dasviewer可以支持las转换osgb&#xff0c;再通过osgb转换fbx或者obj。当然也可以通过重建的方式建模。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三…

入门教程:使用 Postman 发送 post 请求

Postman 是一个实用的开发工具&#xff0c;它让发送各类 POST 请求成为了可能&#xff0c;包括文本、JSON、XML 以及文件等。开发者利用此工具不仅能够检验API的功能性&#xff0c;还能仿真客户端的请求行为&#xff0c;进而深入了解客户端如何与 API 进行互动。 HTTP 协议中的…

半小时实现GPT纯血鸿蒙版

仅需半小时&#xff0c;即可实现纯血鸿蒙版本的ChatGPT&#xff01; 废话少说&#xff0c;先看效果图&#xff1a; 如上图所示&#xff0c;这个小Demo实现了AI智能问答。靠右加粗的文本是用户点击底部提交按钮后出现的&#xff1b;后面靠左对齐的普通文本是来自AI的回答内容。…

MySQL与Java JDBC数据类型对照

MySQL数据类型JAVA数据类型JDBC TYPEBIGINTLongBIGINTTINYINTByteTINYINTSMALLINTShortSMALLINTMEDIUMINTIntegerINTEGERINTEGERIntegerINTEGERINTIntegerINTEGERFLOATFloatREALDOUBLEDoubleDOUBLEDECIMALBigDecimalDECIMALNUMERICBigDecimalNUMERICCHARStringCHARVARCHARStrin…

(第48-59讲)STM32F4单片机,FreeRTOS【事件标志、任务通知、软件定时器、Tickless低功耗】【纯文字讲解】【原创】

文章目录 &#x1f534;&#x1f7e1;&#x1f7e2;其他文章链接&#xff0c;独家吐血整理1、纯文字&#xff08;待补充&#xff09; &#x1f534;&#x1f7e1;&#x1f7e2;其他文章链接&#xff0c;独家吐血整理 【吐血总结】FreeRTOS难点、Systick中断-滴答定时器、PendS…

ES6语法详解+面试必备

ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript的一个版本&#xff0c;它于2015年发布。ES6引入了很多新的语法和功能&#xff0c;使得JavaScript更加强大、灵活和易于使用。 一、块级作用域&#xff1a; ES6引入了let和const关键字&#xff0c;可以在块级作用域中…

IP定位技术:如何保护患者的隐私和医疗数据安全?

随着科技的飞速发展&#xff0c;互联网已经深入到我们生活的方方面面&#xff0c;医疗行业也不例外。然而&#xff0c;这也带来了网络安全问题。如何保护患者的隐私和医疗数据的安全&#xff0c;成为了医疗行业面临的重大挑战。IP定位技术的应用&#xff0c;为解决这一问题提供…

Unity中URP下抓屏的 开启 和 使用

文章目录 前言一、抓屏开启1、Unity下开启抓屏2、Shader中开启抓屏 二、抓屏使用1、设置为半透明渲染队列&#xff0c;关闭深度写入2、申明纹理和采样器3、在片元着色器使用请添加图片描述 三、测试代码 前言 我们在这篇文章中看一下&#xff0c;URP下怎么开启抓屏。 一、抓屏…

(代码模板)JAVA_返回类R

个人留存用&#xff0c;通用返回类R代码模板&#xff1a; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data;import java.io.Serializable; import java.util.HashMap; import java.util.Map;/*** author &#…

《共建开源》系列:Airtest-Framework - UI自动化框架系统

Airtest- Framework 平台简介 Airtest- Framework 是 基于 unittest、Flask、Airtest 搭建的 开源的 UI 自动化框架系统 提供 HTTP API 接口&#xff0c;实现自动解析包名并自动执行 相应目录下的 Case。目前仅支持单台设备连接。多个任务会自动排队处理。 系统要求 Pytho…

【动态规划】【二分查找】C++算法 466 统计重复个数

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 二分查找 力扣:466 统计重复个数 定义 str [s, n] 表示 str 由 n 个字符串 s 连接构成。 例如&#xff0c;str [“abc”, 3] “abcabcabc” 。 如果可以从 s2 中删除某些字符使其变为 s1&#xff0c;则称字符串…