● 344.反转字符串
题目链接: https://leetcode.cn/problems/reverse-string/
解题思路:
遍历字符串的每一个字符, 双指针 分别指向 字符串的头部和尾部,交换 头尾部的位置,实现字符串的反转.
参考答案:
class Solution {
public void reverseString(char[] s) {
int left=0;
int right=s.length-1;
while (left<right){
char temp = s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
}
● 541. 反转字符串II
题目链接: https://leetcode.cn/problems/reverse-string-ii/
解题思路:
每 2k,循环执行一次.
[0 , k] 前k个元素(或者少于k个),进行反转.
[k , 2k]第k个到第2k个(如果存在的话),直接拼接.
定义两个变量firstK , secondK ,分别指向 对应k个元素的头部和尾部, 字符串长度小于尾部 k 或者 2k的话,k和2k的取值为 数组的长度. 否则在字符串切割 substring 的时候,会引起索引 越界.
当 每次循环开始的起始位置,小于字符串长度,就可以继续循环.
参考答案:
class Solution {
public String reverseStr(String s, int k) {
StringBuffer stringBuffer = new StringBuffer();
int start = 0;
int length = s.length();
while (start < length) {
int firstK = start + k;
int secondK = start + 2 * k;
firstK = firstK > length ? length : firstK;
secondK = secondK > length ? length : secondK;
// 处理 前k
String str1 = s.substring(start, firstK);
stringBuffer = stringBuffer.append(new StringBuffer(str1).reverse());
// 处理 k 到 2k 之间
if (secondK > firstK) {
String str2 = s.substring(firstK, secondK);
stringBuffer = stringBuffer.append(str2);
}
start += 2 * k;
}
return stringBuffer.toString();
}
}
● 剑指Offer 05.替换空格
题目链接: https://leetcode.cn/problems/ti-huan-kong-ge-lcof/
解题思路:
定义一个 stringBuffer ,遍历字符串的每一个字符, 遇到 空格,拼接 append "%20" ;\
遇到非空格的字符,直接拼接.
参考答案:
class Solution {
public String replaceSpace(String s) {
StringBuffer stringBuffer = new StringBuffer();
char[] chars = s.toCharArray();
for (char char1 : chars) {
if(char1==' '){
stringBuffer.append("%20");
}else {
stringBuffer.append(char1);
}
}
return stringBuffer.toString();
}
}
● 151.翻转字符串里的单词
题目链接: https://leetcode.cn/problems/ti-huan-kong-ge-lcof/
解题思路:
先用trim 去掉 字符串 头尾的空格.
用" "空格切割字符串,得到字符串数组.
遍历数组,遇到空格,直接跳过;
遇到非空格,直接拼接, 同时拼接上一个空格, 遍历到最后一个非空格字符串的时候,不在拼接 空格.
参考答案:
class Solution {
public String reverseWords(String str) {
// 这个方法让我深刻理解了怎么做切割"
str = str.trim();
String[] split = str.split(" ");
StringBuffer stringBuffer = new StringBuffer();
for (int i = split.length - 1; i >= 0; i--) {
if ( split[i].equals("")) {
continue;
} else {
if (i != 0) {
stringBuffer.append(split[i]);
stringBuffer.append(" ");
} else {
stringBuffer.append(split[i]);
}
}
}
return stringBuffer.toString();
}
}
● 剑指Offer58-II.左旋转字符串
题目链接: https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
解题思路:
利用stringBuffer 重新完成拼接, 遍历字符串里的每一个字符,先拼接不需要左旋转的 右边的元素,再拼接左边的元素.
参考答案:
class Solution {
public String reverseLeftWords(String str, int n) {
char[] chars = str.toCharArray();
StringBuffer stringBuffer = new StringBuffer( str );
for (int i = n; i < chars.length; i++) {
stringBuffer.setCharAt(i - n, chars[i]);
}
for (int i = 0; i < n; i++) {
stringBuffer.setCharAt(i + chars.length - n, chars[i]);
}
return stringBuffer.toString();
}
}
5344



被折叠的 条评论
为什么被折叠?



