本文主要是介绍代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、 卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
344.反转字符串
题目链接: 344.反转字符串
文档讲解:代码随想录
状态:so easy
题解:
public void reverseString(char[] s) {int left = 0, right = s.length - 1;char temp = s[0];while (left <= right) {temp = s[left];s[left] = s[right];s[right] = temp;left++;right--;}}
541. 反转字符串II
题目链接: 541. 反转字符串II
文档讲解:代码随想录
状态:so easy
思路:每次选取2k个字符,翻转前k个,如果剩余长度不足 k,则反转剩余部分
public String reverseStr(String s, int k) {// 将字符串转换为字符数组char[] chars = s.toCharArray();int i = 0;// 遍历字符数组,按规则进行反转while (i < s.length()) {// 反转从i到i+k-1的字符,如果剩余字符不足k个,则反转到字符串末尾reverse(chars, i, Math.min(i + k, s.length()) - 1);// 跳过下一个k个字符i += 2 * k;}// 将字符数组转换为字符串并返回return new String(chars);}public void reverse(char[] chars, int start, int end) {// 反转指定范围的字符while (start <= end) {char temp = chars[start];chars[start] = chars[end];chars[end] = temp;start++;end--;}}
卡码网:54.替换数字
题目链接: 卡码网:54.替换数字
文档讲解:代码随想录
状态:so easy
题解:
public String replace(String s) {char[] chars = s.toCharArray();StringBuilder sb = new StringBuilder();for (char c : chars) {sb.append(Character.isDigit(c) ? "number" : c);}return sb.toString();}
151.翻转字符串里的单词
题目链接: 151.翻转字符串里的单词
文档讲解:代码随想录
状态:还可以
双指针题解:
public String reverseWords(String s) {// 去掉字符串两端的空格并将其转换为字符数组char[] chars = s.trim().toCharArray();// front 和 rear 初始化为字符数组的最后一个位置int front = chars.length - 1;int rear = chars.length - 1;// 用于存储结果字符串StringBuilder sb = new StringBuilder();// 从后向前遍历字符数组while (front >= 0) {// 找到当前单词的起始位置while (front >= 0 && chars[front] != ' ') {front--;}// 将单词添加到 StringBuilder 中,并在末尾添加一个空格sb.append(chars, front + 1, rear - front).append(' ');// 跳过单词之间的空格while (front >= 0 && chars[front] == ' ') {front--;}// 更新 rear 到下一个单词的末尾rear = front;}// 将结果转换为字符串并去掉末尾多余的空格return sb.toString().trim();}
使用split+正则:
public String reverseWords(String s) {// 使用StringBuilder构建最终结果StringBuilder sb = new StringBuilder();// 使用正则表达式分割字符串为单词数组String[] strings = s.split("\\s+");// 从数组末尾开始,遍历单词并添加到StringBuilder中for (int i = strings.length - 1; i >= 0; i--) {sb.append(strings[i]).append(' ');}// 去除StringBuilder末尾的空格并返回结果字符串return sb.toString().trim();}
卡码网:55.右旋转字符串
题目链接: 55.右旋转字符串
文档讲解:代码随想录
状态:so easy
题解:
// 定义一个名为rightHand的方法,该方法接受一个字符串s和一个整数k作为参数public String rightHand(String s, int k) {// 创建一个StringBuilder对象用于构建新的字符串StringBuilder sb = new StringBuilder();// 将字符串s转换为字符数组char[] chars = s.toCharArray();// 使用StringBuilder的append方法,先截取字符数组chars的最后k个字符// 然后截取字符数组chars的前chars.length - k个字符,并将它们拼接起来sb.append(chars, chars.length - k, k).append(chars, 0, chars.length - k);// 返回拼接后的字符串return sb.toString();}
这篇关于代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、 卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!