最近这两天上班回去真的有点晚不想动了,趁着周末有时间赶快补补;


344.反转字符串

建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数

题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.反转字符串.html

题目感想:

1.本道题目如果使用Java的库函数直接就能返回反转后的字符串,这里考察我们不使用库函数怎么实现,直接就是双指针分别指向字符串两头,然后互换所指向的元素,然后两个指针向中间靠拢,直至相遇;

2.交换这里可以思考一下如何实现的位运算:

异或特性

•a ^ a = 0(相同数异或结果为0)

•a ^ 0 = a(任何数与0异或不变)

•异或满足交换律和结合律:a ^ b = b ^ a,(a ^ b) ^ c = a ^ (b ^ c)

所以一定要注意两个指针不能指向同一个位置后还进行交换,这会导致该位置变为0;

点击查看代码
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while (l < r) {
s[l] ^= s[r]; //构造 a ^ b 的结果,并放在 a 中
s[r] ^= s[l]; //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ b
s[l] ^= s[r]; //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换
l++;
r--;
}
}
} // 第二种方法用temp来交换数值更多人容易理解些
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while(l < r){
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
}
}

  1. 反转字符串II

    建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。

    题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.反转字符串II.html

    题目感想:

    1.这破题目真难理解,建议直接看视频的讲解,免得浪费时间;

    2.这道题目看似是有三种情况,一种是正常反转前k个,另外两种是剩下的多余k个少于2k个,以及少于k个;实际上只有两种情况,

    就是正常反转前k个,还有少于k个全部反转;

    3.要注意这里的循环是补长不是1而是2k;

    4.要明白的一点是,只要剩下的多余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;
// 判断尾数够不够k个来取决end指针的位置
int end = Math.min(ch.length - 1,start + k - 1);
while(start < end){ char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp; start++;
end--;
}
}
return new String(ch);
}
}
简化方法
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;
// 判断尾数够不够k个来取决end指针的位置
int end = Math.min(ch.length - 1,start + k - 1);
while(start < end){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp; start++;
end--;
}
}
return new String(ch);
}
}

卡码网:54.替换数字

建议:对于线性数据结构,填充或者删除,后序处理会高效的多。好好体会一下。

题目链接/文章讲解:https://programmercarl.com/kamacoder/0054.替换数字.html

题目感想:

1.这道题目挺有意思的,通过扩建新数组然后将老数组迁移,之后从后往前填充单词,直接覆盖就行,如果我们是从前往后进行填充,那么每次填充都需要将后面的数据进行后移,提高了时间复杂度

点击查看代码
// 为了还原题目本意,先把原数组复制到扩展长度后的新数组,然后不再使用原数组、原地对新数组进行操作。
import java.util.*; public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int len = s.length();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {
len += 5;
}
} char[] ret = new char[len];
for (int i = 0; i < s.length(); i++) {
ret[i] = s.charAt(i);
}
for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
if ('0' <= ret[i] && ret[i] <= '9') {
ret[j--] = 'r';
ret[j--] = 'e';
ret[j--] = 'b';
ret[j--] = 'm';
ret[j--] = 'u';
ret[j--] = 'n';
} else {
ret[j--] = ret[i];
}
}
System.out.println(ret);
}
}

代码随想录第七天 | 字符串part01的更多相关文章

  1. 代码随想录第七天| 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和

    第一题454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, ...

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

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

  3. Python3简明教程(七)—— 字符串

    字符串是 Python 中最常用的数据类型.本节实验将会学习如何对 Python3 的字符串进行处理操作. 字符串的三种表示 可以通过几种不同的方式表示字符串.如单引号('...')或双引号(&quo ...

  4. WebShell代码分析溯源(七)

    WebShell代码分析溯源(七) 一.一句话变形马样本 <?php $e = $_REQUEST['e'];$arr = array($_POST['POST'],);array_map(ba ...

  5. 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

    第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...

  6. 代码随想录-day1

    链表 今天主要是把链表专题刷完了,链表专题的题目不是很难,基本都是考察对链表的操作的理解. 在处理链表问题的时候,我们通常会引入一个哨兵节点(dummy),dummy节点指向原链表的头结点.这样,当我 ...

  7. 代码随想录 day0 博客怎么写

    前言 2.25日开始记录自己的博客生涯以及代码随想录训练营的每日内容 一.题目链接怎么找?怎么设置连接? 力扣题目链接1:力扣 二.正文怎么写? 二分查找 算法思路: 二分查找需要保证数组为有序数组同 ...

  8. 【LeetCode动态规划#05】背包问题的理论分析(基于代码随想录的个人理解,多图)

    背包问题 问题描述 背包问题是一系列问题的统称,具体包括:01背包.完全背包.多重背包.分组背包等(仅需掌握前两种,后面的为竞赛级题目) 下面来研究01背包 实际上即使是最经典的01背包,也不会直接出 ...

  9. 代码随想录算法训练营day11 | leetcode 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

    基础知识 String StringBuilder 操作 public class StringOperation { int startIndex; int endIndex; { //初始容量为1 ...

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

    基础知识 // String -> char[] char[] string=s.toCharArray(); // char[] -> String String.valueOf(str ...

随机推荐

  1. nuclei安装使用

    go环境安装 go 下载路径:https://golang.google.cn/dl/ 1.双击 go1.20.7.windows-amd64.msi 2.点击下一步 3.我同意,然后下一步. 4.选 ...

  2. Python面向对象-反射

    python面向对象-反射 在python的面向对象中,与用户交互的主要方式就是利用反射来判断用户输入的指令是否存在和可执行 反射的定义 在python中反射主要是应用于类的对象上,在运行时,将对象的 ...

  3. echarts柱形图给X轴坐标类目添加点击事件

    在项目中遇到这么个需求要在柱形图上的x轴添加点击事件,当点击对应x轴文字的时候要弹出模态框展示子图表 根据echarts的Api给图表实例绑定点击事件 myChartInstance?.on('cli ...

  4. vue学习二(过滤器)

    过滤器常用户来处理文本格式化的操作  过滤器还可以用在两个地方:花括号和v-bind 表达式 1.全局过滤器 {{user.gender|gfilter}} Vue.filter("gfil ...

  5. Mavros & Mavlink

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考 https://www.bilibili.com/video/BV1x841167uG?spm_id_from=33 ...

  6. Tomcat的优化(分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

    Tomcat的优化        一.Tomcat 优化                Tomcat 配置文件参数优化        二.系统内核优化        三.Tomcat 配置 JVM 参 ...

  7. docker clean images

    docker ps | grep portal | awk '{print $2}' | cut -d ":" -f3 used=`docker ps | grep portal ...

  8. English interview - how to show your skills in English during the interview process?(probably used in resume,cover letter)

    Formula We can use the formula below to express our skills in English. Formula: adv/adj + verb phras ...

  9. String常见面试题

    第一题:打印的结果是true还是false呢? 在之前我们就说过这题,执行s1时,检查字符串常量池,发现没有"abc",于是创建"abc",执行s2时,接着检查 ...

  10. 【Java】各种代码块的执行顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行. 执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public ...