当前位置: 首页 > news >正文

代码随想录算法训练营第9天

151.反转字符串中的单词

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

视频链接:代码随想录 (programmercarl.com)

第一想法

使用split函数然后倒序相加

代码随想录想法

先去除空格,再将整个字符串反转,再将单个单词反转

去除空格

如果时间复杂度为O(n)的话,新new StringBuilder sb追加加字符即可。既要判断非空格字符原样追加又要保证单词间距一个空格的距离的逻辑是

if(s.charAt(start)!=' '||sb.charAt(sb.length()-1)!=' ')//如果当前字符不为空或者已追加新单词后没有空格sb.append(s.charAt(start));

代码

class Solution {public String reverseWords(String s) {//去除空格StringBuilder sb =  RemoveSpace(s);//反转整个字符串reverseWholeWord(sb,0,sb.length()-1);//反转单个字符串ReverseSingleWord(sb);//返回return sb.toString();}public StringBuilder RemoveSpace(String s){int start = 0;int end = s.length() - 1;StringBuilder sb = new StringBuilder();while (s.charAt(start)==' ')start++;//去除前导空字符while (s.charAt(end)==' ')end--;//去除后导空字符while (start<=end){if(s.charAt(start)!=' '||sb.charAt(sb.length()-1)!=' ')//如果当前字符不为空或者已追加新单词后没有空格sb.append(s.charAt(start));start++;}return sb;}public void reverseWholeWord(StringBuilder sb,int start,int end){while (start<end){char temp = sb.charAt(start);sb.setCharAt(start,sb.charAt(end));sb.setCharAt(end,temp);start++;end--;}}public void ReverseSingleWord(StringBuilder sb){int start = 0;int end = 1;while (start < sb.length()) {while (end<sb.length()&&sb.charAt(end)!=' ')end++;reverseWholeWord(sb,start,end-1);start = end + 1;end = start + 1;}}
}
class Solution2 {public String reverseWords(String s) {char[] oldCharArray = s.toCharArray();char[] newCharArray = new char[oldCharArray.length];int newIndex = 0;int i = oldCharArray.length - 1;while (i>=0){while (i>=0&&oldCharArray[i]==' ')i--;//去除末尾空格,循环结束时,i指向第一个非空格元素int right = i;//设定右边界while (i>=0&&oldCharArray[i]!=' ')i--;//跳过一个单词,循环结束时,i指向该元素的左边界。首元素则指向-1,非首元素则指向前面的空格//单独获取一个单词的边界[i+1,right];for(int j = i+1;j<=right;j++){newCharArray[newIndex++] = oldCharArray[j];if(j==right)//如果抵达右边界,则末尾加一个空格newCharArray[newIndex++] = ' ';}}if(newIndex == 0) return "";else return new String(newCharArray,0,newIndex - 1);}
}

卡码网55.右旋字符串

题目链接:55. 右旋字符串(第八期模拟笔试) (kamacoder.com)

文档/视频链接:代码随想录 (programmercarl.com)

第一想法

定义双端队列,右端出n个元素加入到左端。但是这样做就没意义了。

或者先将整个字符串反转,分别将子字符串反转回来。

假设字符串为"abcdefg" ,n = 2

先反转整体"gfedcba",

再反转局部:[0,n-1],变成 fg edcba;

                      [n,length -1]变成 fg abcde

代码随想录想法

看了感觉和第一想法差不多。

代码

class Solution2{public String RightReverse(String s,int n){char[] charArray = s.toCharArray();//先反转整体的Reverse(charArray,0,charArray.length-1);//再反转局部Reverse(charArray,0,n-1);Reverse(charArray,n,charArray.length-1);return new String(charArray);}public void Reverse(char[] s, int start,int end){while (start<end){char temp = s[start];s[start] = s[end];s[end] = temp;start++;end--;}}
}

KMP留到以后补吧,今天就暂且不看了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 142. 两个字符串的最小 ASCII 删除总和(卡码网周赛第二十五期(23年B站笔试真题))
  • java使用easypoi模版导出word详细步骤
  • 我被手机所伤,竟如此憔悴。
  • 假期笔记1:anaconda的安装与pycharm中的引用
  • Linux 程序卡死的特殊处理
  • 进度条提示-在python程序中使用避免我误以为挂掉了
  • 微服务的分布式事务解决方案
  • Linux 初识
  • 通过Arcgis从逐月平均气温数据中提取并计算年平均气温
  • springboot 操作mongo
  • 云计算渲染时代:选择Blender或KeyShot进行高效渲染
  • 第一关:Linux基础知识
  • easy-poi实现动态列(标题)、多sheet导出excel
  • 爬虫:Sentry-Span参数逆向
  • mysql数据库被偷家,数据全部丢失。还勒索我给他比特币
  • [译] React v16.8: 含有Hooks的版本
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 3.7、@ResponseBody 和 @RestController
  • Computed property XXX was assigned to but it has no setter
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • docker python 配置
  • HTTP 简介
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • javascript面向对象之创建对象
  • nodejs:开发并发布一个nodejs包
  • PhantomJS 安装
  • Vue全家桶实现一个Web App
  • 搭建gitbook 和 访问权限认证
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 详解NodeJs流之一
  • gunicorn工作原理
  • hi-nginx-1.3.4编译安装
  • ​TypeScript都不会用,也敢说会前端?
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #07【面试问题整理】嵌入式软件工程师
  • #define、const、typedef的差别
  • (02)vite环境变量配置
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Java入门)学生管理系统
  • (LeetCode 49)Anagrams
  • (定时器/计数器)中断系统(详解与使用)
  • (二十六)Java 数据结构
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .net dataexcel 脚本公式 函数源码