344.反转字符串
代码示例
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while (l < r) {
s[l]^ = s[r];
s[r]^ = s[l];
s[l]^ = s[r];
l++;
r--;
}
}
}
心得体会
双指针,将左右指针分别指向字符串的首尾,然后在循环中交换两个指针所指向的字符,直到左指针大于等于右指针为止。具体来说,交换两个字符的方法是使用异或运算,将两个字符的ASCII码进行异或,得到的结果再异或其中一个字符,最后再异或另一个字符,就可以完成交换。
541.反转字符串||
代码示例
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;
int end = Math.min(ch.length - 1, start + k - 1);
while(start < end){
ch[start]^ = ch[end];
ch[end]^ = ch[start];
ch[start]^ = ch[end];
start++;
end--;
}
}
return new String(ch);
}
}
心得体会
使用char数组将字符串转换为可变形式。然后,以2k的步长迭代数组,其中k是给定的组大小。对于每个组,基于当前索引和组大小设置起始和结束指针。然后,交换反转组中的字符。最后,将修改后的char数组作为字符串返回。
剑指offer.05.替换空格
代码示例
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for(Character c : s.toCharArray())
{
if(c == ' ') res.append("%20");
else res.append(c);
}
return res.toString();
}
}
心得体会
replaceSpace方法接受一个字符串s作为参数,并返回一个新的字符串,其中所有空格都被替换为"%20"。它使用一个StringBuilder对象来构建新字符串,遍历输入字符串中的每个字符,如果字符是空格,则将"%20"添加到StringBuilder中,否则将字符本身添加到StringBuilder中。最后,它将StringBuilder转换为一个字符串并返回。
151.反转字符串里的单词
代码示例
class Solution {
public String reverseWords(String s) {
//源字符数组
char[] initialArr = s.toCharArray();
//新字符数组
char[] newArr = new char[initialArr.length+1];
int newArrPos = 0;
int i = initialArr.length-1;
while(i>=0){
while(i>=0 && initialArr[i] == ' '){i--;}
int right = i;
while(i>=0 && initialArr[i] != ' '){i--;}
for (int j = i+1; j <= right; j++) {
newArr[newArrPos++] = initialArr[j];
if(j == right){
newArr[newArrPos++] = ' ';
}
}
}
if(newArrPos == 0){
return "";
}else{
return new String(newArr,0,newArrPos-1);
}
}
}
心得体会
reverseWords 方法接收一个字符串参数 s,并返回反转后的字符串。该方法首先将字符串转换为字符数组 initialArr,然后创建一个新的字符数组 newArr,用于存储反转后的字符串。接下来,代码从字符串的末尾开始遍历,跳过空格并记录单词的边界,然后将每个单词添加到 newArr 中,并在每个单词的末尾添加一个空格。最后,如果 newArr 中没有任何字符,则返回空字符串,否则返回 newArr 中从索引0到末尾空格索引前的字符数组(转换为字符串)。
剑指offer58.|| 左旋转字符串
代码示例
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder res = new StringBuilder();
for(int i = n; i < s.length(); i++)
res.append(s.charAt(i));
for(int i = 0; i < n; i++)
res.append(s.charAt(i));
return res.toString();
}
}
心得体会
reverseLeftWords方法接受两个参数:一个字符串s和一个整数n。该方法返回一个新字符串,该字符串是将原始字符串s中前n个字符移动到字符串的末尾得到的。该方法使用StringBuilder类来构建新字符串。它首先从原始字符串的第n个字符开始迭代,将每个字符添加到StringBuilder中。然后,它从原始字符串的开头开始迭代,将前n个字符添加到StringBuilder中。最后,它将StringBuilder转换为字符串并返回。