文章目录
Leetcode 344. 反转字符串
题目:344. 反转字符串
解析:代码随想录解析
解题思路
数组,双指针反转
代码
class Solution {
public void reverseString(char[] s) {
int left = 0, right = s.length - 1;
while (left < right){
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
}
总结
暂无
Leetcode 541. 反转字符串 II
题目:541. 反转字符串 II
解析:代码随想录解析
解题思路
每k个翻转一次,后k个不动。
代码
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i += 2 * k) {
if (i + k < ch.length)
reverse(ch, i, i + k - 1);
else
reverse(ch, i, ch.length - 1);
}
return new String(ch);
}
public void reverse(char[] ch, int left, int right){
while (left < right){
char tmp = ch[left];
ch[left] = ch[right];
ch[right] = tmp;
left++;
right--;
}
}
}
总结
String是不变类型,转化为char数组再进行操作
卡代网 54. 替换数字(第八期模拟笔试)
题目:54. 替换数字(第八期模拟笔试)
解析:代码随想录取解析
解题思路
使用工具函数
代码
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++){
if (Character.isDigit(s.charAt(i)))
sb.append("number");
else
sb.append(s.charAt(i));
}
System.out.println(sb);
}
}
总结
StringBuilder挺好用
Leetcode 151.翻转字符串里的单词
题目:**151.翻转字符串里的单词 **
解析:代码随想录解析
解题思路
构造三个函数
一个删除多余空格(使用双指针去除两头多余空格)
一个翻转函数
一个找单词翻转单词函数(使用双指针来匹配单词)
代码
class Solution {
public String reverseWords(String s) {
//删空格
StringBuilder sb = removeSpace(s);
//反转单词
reverseEachWord(sb);
//反转all
reverse(sb, 0 , sb.length() -1);
return sb.toString();
}
//删除多余空格
private StringBuilder removeSpace(String s){
StringBuilder sb = new StringBuilder();
int begin = 0;
int end = s.length() - 1;
while (s.charAt(begin) == ' ') begin++;
while (s.charAt(end) == ' ') end--;
while (begin <= end){
char c = s.charAt(begin);
if (c != ' ' || sb.charAt(sb.length() - 1) != ' ')
sb.append(c);
begin++;
}
return sb;
}
//反转函数
private void reverse(StringBuilder sb, int begin, int end){
while (begin < end){
char tmp = sb.charAt(begin);
sb.setCharAt(begin, sb.charAt(end));
sb.setCharAt(end, tmp);
begin++;
end--;
}
}
//识别单词和反转单个单词
private void reverseEachWord(StringBuilder sb){
int begin = 0;
int end = 1;
int n = sb.length();
while (begin < n){
while (end < n && sb.charAt(end) != ' ')
end++;
reverse(sb, begin, end - 1);
begin = end + 1;
end = begin + 1;
}
}
}
总结
暂无
卡码网 55. 右旋字符串(第八期模拟笔试)
题目:55. 右旋字符串(第八期模拟笔试)
解析:代码随想录解析
解题思路
翻转三次
代码
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int k = Integer.parseInt(scanner.nextLine());
String s = scanner.nextLine();
char[] ch = s.toCharArray();
reverse(ch, 0, ch.length - 1 - k);
reverse(ch, ch.length - k, ch.length - 1);
reverse(ch, 0, ch.length - 1);
System.out.println(new String(ch));
}
private static void reverse(char[] ch, int begin, int end){
while (begin < end){
char tmp = ch[begin];
ch[begin] = ch[end];
ch[end] = tmp;
begin++;
end--;
}
}
}
总结
暂无
Stringbuider基本用法
// 创建StringBuilder对象
StringBuilder sb = new StringBuilder();
// 追加字符串
sb.append("Hello, ");
sb.append("world!");
System.out.println(sb.toString()); // 输出:Hello, world!
// 插入字符串
sb.insert(7, "beautiful ");
System.out.println(sb.toString()); // 输出:Hello, beautiful world!
// 删除字符
sb.delete(7, 16);
System.out.println(sb.toString()); // 输出:Hello, world!
// 替换字符
sb.replace(0, 5, "Hi");
System.out.println(sb.toString()); // 输出:Hi, world!
// 设置长度
sb.setLength(5);
System.out.println(sb.toString()); // 输出:Hi, w
// 转换为字符串
String result = sb.toString();
System.out.println(result); // 输出:Hi, w