基础知识

// String -> char[]
char[] string=s.toCharArray();
// char[] -> String
String.valueOf(string)

注意replace replaceAll区别,都是全局匹配替换,不过replaceAll是正则匹配

LeetCode 344.反转字符串

分析1.0

基础的前后指针元素互换

class Solution {
public void reverseString(char[] s) {
if(s==null){
return;
}
int len=s.length;
if(len==0 || len==1){
return;
}
int left=0, right=len-1;
while(left<right){
char temp=s[right];
s[right]=s[left];
s[left]=temp;
left++;
right--;
}
return;
}
}

LeetCode 541. 反转字符串II

分析1.0

涉及多次反转,考虑写一个根据索引反转字符串的函数,反转部分之后,考虑剩下的元素个数;

String -> StringBuilder 或者采用字符数组的方式处理

class Solution {
public String reverseStr(String s, int k) {
int len=s.length();
if(s==null){
return null;
}
char[] string=s.toCharArray();
int endIndex=len-1;
int startIndex=0;
while(startIndex<=endIndex){
//System.out.println("start position: "+startIndex);
int gap=endIndex-startIndex+1;
//System.out.println("gap: "+gap);
if(gap<k){
reverse(string, startIndex, endIndex);
break;
}else if(gap<2*k && gap>=k){
reverse(string, startIndex, startIndex+k-1);
break;
}else{
reverse(string, startIndex, startIndex+k-1);
startIndex=startIndex+2*k;
}
//System.out.println(string);
}
return String.valueOf(string);
} public void reverse(char[] s, int left, int right){
while(left<right){
char temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
}

LeetCode

分析1.0

直接用了API 

class Solution {
public String replaceSpace(String s) {
return s.replace(" ","%20");
}
}

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

分析1.0

遍历,遍历过程中去除多余空格,将获得的一个一个单词采用尾插法加入List<StringBuilder>,最后再使用空格拼接

获取单词首指针、检查合法性、获取尾指针 

class Solution {
public String reverseWords(String s) {
if(s==null){
return null;
}
// s=s.trim();
ArrayDeque<String> stack = new ArrayDeque();
int len=s.length();
int leftIndex=0, rightIndex=0;
while(leftIndex<len){
// 获取s中每个单词的起始索引
while(leftIndex<len && s.charAt(leftIndex)==' '){
leftIndex++;
}
// 这里要注意跳出
if(leftIndex>=len){
break;
}
rightIndex=leftIndex;
while(rightIndex<len && s.charAt(rightIndex)!=' '){
rightIndex++;
}// 此时rightIndex指向某个单词的最后一个字符的索引的后面的空格
String temp=s.substring(leftIndex, rightIndex);
System.out.println("----"+temp);
stack.push(temp);
leftIndex=rightIndex;
}
StringBuilder ans = new StringBuilder();
while(!stack.isEmpty()){
ans.append(stack.pop())
.append(" ");
}
// return ans.toString().trim(); 二者都行
return ans.substring(0, ans.length()-1);
}
}

失误

每次获取一个单词前都要检查当前额left指针是否超过了s的长度

substring() 要小写 subString()是错的

分析2.0

反转s,再反转所有的单词

采用trim()方法去除收尾多余空格,再用replaceAll()

LeetCode 剑指Offer58-II.左旋转字符串

分析1.0

相当于逻辑左移所有字符串元素,左移个数如果是元素个数的倍数,那就不移动,即要将移动次数对字符串长度取余,再向左移动,增加字符串空间,取余后的索引为n的元素为新的首元素,将原字符串截断后拼接即可

class Solution {
public String reverseLeftWords(String s, int n) {
int len=s.length();
n=n%len;
String s1=s.substring(0,n);
String s2=s.substring(n,len);
return s2+s1;
}
}

分析2.0

反转两个局部,再整体反转

总结

  1. 数组长度 arr.length 字符串长度 s.length()
  2. 双指针-前后指针、快慢指针、滑动窗口 降低时间复杂度利器
  3. 工具:Arrays、Collections、队列、栈(逆序好帮手)、哈希表/map 
  4. substring() 要小写 subString()是错的
  5. s.trim().replaceAll("\\s+", " ") 去除收尾多余空格并将字符串内多余空格变成一个空格

常用变量名增量更新

size、val、ans、cnt、cur、pre、next、left、right、index、gap、tar、res、src、len、start、end

代码随想录算法训练营day08 | leetcode 344.反转字符串/541. 反转字符串II / 剑指Offer05.替换空格/151.翻转字符串里的单词/剑指Offer58-II.左旋转字符串的更多相关文章

  1. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  2. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

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

  3. Leetcode 344:Reverse String 反转字符串(python、java)

    Leetcode 344:Reverse String 反转字符串 公众号:爱写bug Write a function that reverses a string. The input strin ...

  4. 笔试算法题(13):反转链表 & 左旋转字符串

    出题:反转链表(递归和非递归解法): 分析:有递归跟非递归实现,注意对原始链表头节点的处理,因为其他节点都指向下一个节点,其需要指向NULL: 解题: struct Node { int v; Nod ...

  5. 编程算法 - 左旋转字符串 代码(C)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/37689725 左旋转字符串 代码(C) 本文 ...

  6. 九度OJ 1362 左旋转字符串(Move!Move!!Move!!!)【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1362 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运 ...

  7. leetcode题库练习_左旋转字符串

    题目:左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返 ...

  8. Leetcode#344. Reverse String(反转字符串)

    题目描述 编写一个函数,其作用是将输入的字符串反转过来. 示例 1: 输入: "hello" 输出: "olleh" 示例 2: 输入: "A man ...

  9. 【LeetCode】151. 翻转字符串里的单词(剑指offer 58-I)

    151. 翻转字符串里的单词 知识点:字符串:双指针 题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔 ...

  10. [LeetCode] 344 Reverse String && 541 Reverse String II

    原题地址: 344 Reverse String: https://leetcode.com/problems/reverse-string/description/ 541 Reverse Stri ...

随机推荐

  1. 详解 Redis 中 big keys 发现和解决

    在使用 Redis 时,可能会出现请求响应慢.网络卡顿.数据丢失的情况.排查问题的时候,发现是 big keys 的问题. 什么是 big keys 在 Redis 中,一个字符串类型最大可以达到 5 ...

  2. [奶奶看了都会]ChatGPT保姆级注册教程

    大家好,我是小卷 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜.这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题. 有人说ChatGPT是真正的人工 ...

  3. [opencv]一些重配遇到的问题(只针对我自己的电脑)

    1.我的opencv版本是4.5.3 2.环境变量这样配 3.对于每个项目,项目属性这样配: 其中包含目录: C:\Users\dxd\OPCV\opencv\build\include\opencv ...

  4. 玩转 Go 生态|Hertz WebSocket 扩展简析

    WebSocket 是一种可以在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...

  5. Dubbo 3 之 Triple 流控反压原理解析

    作者:顾欣 Triple 是 Dubbo 3 提出的基于 HTTP2 的开放协议, 旨在解决 Dubbo 2 私有协议带来的互通性问题. Triple 基于 HTTP/2 定制自己的流控,支持通过特定 ...

  6. [数据与分析可视化] D3入门教程2-在d3中构建形状

    d3.js入门教程2-在 d3.js中构建形状 文章目录 d3.js入门教程2-在 d3.js中构建形状 形状的添加 圆形的添加 矩形的添加 线段的添加 文本的添加 折线的添加 区域的添加 圆弧的添加 ...

  7. python进阶之路2——解释器软件安装

    内容概要 计算机五大组成部分 计算机三大核心硬件 操作系统 编程与编程语言 编程语言发展史 编程语言的分类 python解释器下载与安装 python解释器多版本共存 pycharm安装 计算机五大组 ...

  8. Gvim基础操作(正则表达式)-02

    Gvim正则表达式 正则表达式在linux中使用非常广泛.主要是进行一些替换,在编写脚本的时候都会使用到.gvim.perl.sed.tcl中都会使用到. Gvim正则表达式的使用 搜索命令 /正则表 ...

  9. ChatGPT 背后的“功臣”——RLHF 技术详解

    OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮,它面对多种多样的问题对答如流,似乎已经打破了机器和人的边界.这一工作的背后是大型语言模型 (Large Language Mode ...

  10. 从 GPT2 到 Stable Diffusion:Elixir 社区迎来了 Hugging Face

    上周,Elixir 社区向大家宣布,Elixir 语言社区新增从 GPT2 到 Stable Diffusion 的一系列神经网络模型.这些模型得以实现归功于刚刚发布的 Bumblebee 库.Bum ...