344.反转字符串
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while(left < right) {
char temp;
temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
题目链接/文章讲解/视频讲解:programmercarl.com/0344.%E5%8F…
541. 反转字符串II
建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
// 1. 每隔 2k 个字符的前 k 个字符进行反转
for (int i = 0; i< ch.length; i += 2 * k) {
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= ch.length) {
reverse(ch, i, i + k -1);
continue;
}
// 3. 剩余字符少于 k 个,则将剩余字符全部反转
reverse(ch, i, ch.length - 1);
}
return new String(ch);
}
// 定义翻转函数
public void reverse(char[] ch, int i, int j) {
for (; i < j; i++, j--) {
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
}
题目链接/文章讲解/视频讲解:programmercarl.com/0541.%E5%8F…
卡码网:54.替换数字
思路:先计算多少个数字,再定义该数字替换number以后的长度,从后往前填充数组
题目链接/文章讲解:programmercarl.com/kama54.%E6%…
151.翻转字符串里的单词
刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,比较难,细节比较多。
class Solution {
public String reverseWords(String s) {
// 将字符串转换未数组
char[] chars = s.toCharArray();
//去掉空格,整体反转,再反转单词
int slow = 0;
for (int fast = 0; fast < chars.length; fast++) {
if(chars[fast] != ' ') {
// 用slow加空格,除了第一个单词外,单词末尾要加空格
if (slow != 0) chars[slow++] = ' ';
while(fast < chars.length && chars[fast] != ' ') {
chars[slow++] = chars[fast++];
}
}
}
//相当于 c++ 里的 resize()
char[] newChars = new char[slow];
System.arraycopy(chars, 0, newChars, 0, slow);
// 反转整个字符串
reverse(newChars, 0 , newChars.length);
//反转每个单词
int begin = 0;
for(int end = 0; end <= newChars.length ; end++) {
if(end == newChars.length || newChars[end] == ' ') {
reverse(newChars,begin, end);
begin = end + 1;
}
}
// 将字符串数组转换为字符串返回
return new String(newChars);
}
// 反转函数,左闭右开[ )
public void reverse(char[] chars, int start, int end) {
for(int i =start, j = end-1 ;i < j; i++, j--) {
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}
}
题目链接/文章讲解/视频讲解:programmercarl.com/0151.%E7%BF…
卡码网:55.右旋转字符串
思路:先整体翻转,再局部翻转
题目链接/文章讲解: