反转字符串 反转字符串 || 反转字符串 |||

思想总结:首先将字符串转变为字符数组,再进行遍历并反转字符。

1.反转字符串

代码:

java 复制代码
class Solution {
    public void reverseString(char[] s) {
        reverse(s,0,s.length); //左闭右开
    }

    public static void reverse(char[] ch,int i,int j) { 翻转函数
        
        j = j-1;
        while(i<j) {
            char tmp = ch[i];
            ch[i] = ch[j];
            ch[j] = tmp;
            i++;
            j--;
        }
         
    }
}

2.反转字符串 ||

代码:

java 复制代码
class Solution {
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();  //先将字符串 转换为 字符数组
        for(int i=0;i<s.length();i+=2*k) {
            if(i+k <= s.length()) {   //剩余的字符个数肯定大于k
                reverse(arr,i,i+k);  //左开右闭

            }else{
                reverse(arr,i,s.length()); //左开右闭 剩余字符少于k个的情况
            }   
        }

        return new String(arr);
    }

    public static void reverse(char[] ch,int i,int j) { //翻转函数
        j = j-1;
        while(i<j) {
            char tmp = ch[i];
            ch[i] = ch[j];
            ch[j] = tmp;
            i++;
            j--;
        }

    }
}

3.反转字符串中的单词 |||

可以双指针 也可以用栈来做

代码:

java 复制代码
class Solution {
    /* 
    //第一种 双指针
    public String reverseWords(String s) {
        char[] ch = s.toCharArray();
        int left = 0;  //  left保存每一次翻转的最开始位置
        int right=0;   //  right 保存每一次反转的结束位置

        for(;right<ch.length;right++) {
            if(ch[right]==' ') {
                reserve(ch,left,right);   //左开右闭
                left = right+1;
            }
        }
        reserve(ch,left,right);   //翻转最后一组字符串



        return new String(ch);  //字符数组转换为字符串
    }
    public static void reserve(char[] ch,int i ,int j) {  //自定义翻转函数
        j = j-1;
        while(i<j) {
            char tmp = ch[i];
            ch[i] = ch[j];
            ch[j] = tmp;
            i++;
            j--;
        }
    }*/


    //2. 用栈来做
    public String reverseWords(String s) {

        Stack<Character> stack = new Stack<>();
        char[] ch = s.toCharArray();
        StringBuilder sb = new StringBuilder();

        for(int i = 0;i<ch.length;i++) {
            if(ch[i]!=' ') {
                stack.push(ch[i]);
            }else{
                while(!stack.isEmpty()) {
                    sb.append(stack.pop());
                }
                sb.append(' ');
            }
        }
        while(!stack.isEmpty()) {
                    sb.append(stack.pop());
                }

        return sb.toString();
    }


}
相关推荐
9号达人18 分钟前
if-else 优化的折中思考:不是消灭分支,而是控制风险
java·后端·面试
远远远远子38 分钟前
C++-- 内存管理
c++·算法
不知道累,只知道类38 分钟前
Java 在AWS上使用SDK凭证获取顺序
java·aws
sprintzer1 小时前
10.6-10.15力扣模拟刷题
算法·leetcode·职场和发展
徐子童1 小时前
算法---队列+宽搜
算法··队列·层序遍历
咖啡Beans1 小时前
SpringBoot2.7集成Swagger3.0
java·swagger
一念&1 小时前
每日一个C语言知识:C 数组
c语言·开发语言·算法
小年糕是糕手1 小时前
【数据结构】单链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
聪明的笨猪猪1 小时前
Java JVM “垃圾回收(GC)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
Moniane2 小时前
时序数据库全面重构指南
java·后端·struts