344.反转字符串
建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数
class Solution {
public void reverseString(char[] s) {
int len=s.length;
// System.out.println(len);
int j=len-1;
for(int i=0;i<len/2;i++,j--){
char tmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}
}
541. 反转字符串II
建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。
好难,不懂,到时候复盘。
class Solution {
public String reverseStr(String s, int k) {
char[] ch=s.toCharArray();
// 比如ch是’abcdefg',i一开始是0,k是2,然后i是4
//第一轮反转索引0到1,
for (int i=0;i<ch.length;i=i+2*k){//i指针以2k的步长移动
// reverse(ch,i,i+k-1);
if(i+k<=ch.length){
reverse(ch,i,i+k-1);
continue;
}
reverse(ch,i,ch.length-1);
}
String str=new String(ch);
return str;
}
//反转ch字符串i到j范围内的,例子i,j分别是0,3,ch里的’abcd‘就变成’dcba‘
public void reverse(char[] ch,int i,int j){
for(;i<j;i++,j--){
char tmp=ch[i];
ch[i]=ch[j];
ch[j]=tmp;
}
}
}
卡码网:54.替换数字
建议:对于线性数据结构,填充或者删除,后序处理会高效的多。好好体会一下。
题目链接/文章讲解:https://programmercarl.com/kama54.%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97.html
151.翻转字符串里的单词
这题偷懒了。使用split库函数,分隔单词,然后定义一个新的string字符串,最后再把单词倒序相加。
但其实有更深的解法
https://www.bilibili.com/video/BV1uT41177fX/?spm_id_from=333.788&vd_source=8a9c6e24d3474685bf451d352e7e1565
class Solution {
public String reverseWords(String s) {
String word=s.trim();
String[] words=word.split("\\s+");
// System.out.println(word);
// for(String i:words){
// System.out.println(i);
// }
int left=0,right=words.length-1;
while(left<right){
String tmp=words[left];
words[left]=words[right];
words[right]=tmp;
left++;
right--;
}
return String.join(" ",words);
}
}
卡码网:55.右旋转字符串
建议:题解中的解法如果没接触过的话,应该会想不到
题目链接/文章讲解:
https://programmercarl.com/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.html