344.反转字符串
题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html
思路:
通过交换字符的位置来实现字符串反转。使用两个指针,一个指向字符串的开头,另一个指向字符串的末尾,然后交换这两个指针指向的字符,然后分别向中间移动指针,直到两个指针相遇。
步骤:
-
创建一个函数
reverseString
,接收一个字符数组s
作为参数。 -
使用两个指针
start
和end
,分别指向字符数组的开头和末尾。 -
进入循环,当 start < end:
- 交换
s[start]
和s[end]
的值。 - 将
start
指针向右移动一位。 - 将
end
指针向左移动一位。
- 交换
-
循环结束后,字符数组
s
中的字符串已经被反转。 -
返回反转后的字符数组
s
。
完整代码
public class Solution {
public void reverseString(char[] s) {
int start = 0;
int end = s.length - 1;
while (start < end) {
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
public static void main(String[] args) {
char[] s = {'h', 'e', 'l', 'l', 'o'};
Solution solution = new Solution();
solution.reverseString(s);
System.out.println(Arrays.toString(s));
}
}
541. 反转字符串II
题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html
思路:
- 创建一个字符数组
chArr
,将字符串s
转换为字符数组。 - 使用循环遍历字符数组,每次遍历
2k
个字符。 - 对于每个
2k
字符的前k
个字符,使用双指针的方法进行反转。 - 注意处理剩余字符的情况,如果剩余字符少于
k
个,则将剩余字符全部反转。 - 最后将字符数组转换回字符串并返回结果。
完整代码
public class Solution {
public String reverseStr(String s, int k) {
char[] chArr = s.toCharArray();
for (int i = 0; i < chArr.length; i += 2 * k) {
int start = i;
int end = Math.min(i + k - 1, chArr.length - 1);
// 反转前 k 个字符
while (start < end) {
char temp = chArr[start];
chArr[start] = chArr[end];
chArr[end] = temp;
start++;
end--;
}
}
return new String(chArr);
}
public static void main(String[] args) {
Solution solution = new Solution();
String s = "abcdefg";
int k = 2;
String result = solution.reverseStr(s, k);
System.out.println(result);
}
}
卡码网:54.替换数字
题目链接/文章讲解:https://programmercarl.com/kama54.%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97.html
思路:
- 创建一个StringBuilder对象,用于存储转换后的字符串。
- 遍历输入字符串s中的每个字符。
- 如果当前字符是字母,则直接将其添加到StringBuilder中。
- 如果当前字符是数字,则将"number"添加到StringBuilder中。
- 将StringBuilder转换为字符串并返回结果。
完整代码
public class Solution {
public String replaceDigits(String s) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isLetter(c)) {
sb.append(c);
} else if (Character.isDigit(c)) {
sb.append("number");
}
}
return sb.toString();
}
public static void main(String[] args) {
Solution solution = new Solution();
String s = "a1b2c3";
String result = solution.replaceDigits(s);
System.out.println(result);
}
}
151.翻转字符串里的单词
题目链接/文章讲解/视频讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html
思路:
- 使用trim()方法去除输入字符串s的前导和尾随空格。
- 将字符串s按照空格分割成单词数组。
- 创建一个StringBuilder对象,用于存储反转后的结果。
- 从单词数组的最后一个单词开始遍历,将每个单词添加到StringBuilder中,并在单词之间添加一个空格。
- 将StringBuilder转换为字符串并返回结果。
完整代码
public class Solution {
public String reverseWords(String s) {
// 去除前导和尾随空格
s = s.trim();
// 按照空格分割成单词数组
String[] words = s.split("\\s+");
StringBuilder sb = new StringBuilder();
// 从最后一个单词开始遍历
for (int i = words.length - 1; i >= 0; i--) {
sb.append(words[i]);
if (i != 0) {
sb.append(" ");
}
}
return sb.toString();
}
public static void main(String[] args) {
Solution solution = new Solution();
String s = "the sky is blue";
String result = solution.reverseWords(s);
System.out.println(result);
}
}
不使用库函数未整理完
卡码网:55.右旋转字符串
题目链接/文章讲解:
https://programmercarl.com/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.html