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

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

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();
    }


}
相关推荐
天远数科11 分钟前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
YaraMemo36 分钟前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理
骇客野人37 分钟前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng11 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
weixin_307779131 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN1 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
wxwx_bscxy3222 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
枫叶林FYL2 小时前
【群体智能集群控制工程实践】第3章 一致性协同算法
算法
禹凕3 小时前
滑动窗口算法实战指南
python·算法
evans在进步3 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio