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

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

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


}
相关推荐
努力学习的小廉3 分钟前
我爱学算法之——动态规划(四)
算法·动态规划
better_liang10 分钟前
每日Java面试场景题知识点之-Redisson热门使用场景
java·redis·微服务·分布式锁·redisson·分布式系统
2301_7926748613 分钟前
java学习 day26
java
so2F32hj214 分钟前
拆解 OpenHands(14)--- Microagents
java·开发语言
明灯伴古佛18 分钟前
面试:什么是可重入性?为什么 synchronized 是可重入锁?
java·jvm·面试
卓怡学长23 分钟前
m307自习室预订座位管理分析与实现
java·spring boot·spring
Arya_aa29 分钟前
生猪养殖溯源系统前期准备与SpringBoot框架
java·spring boot
北顾笙98029 分钟前
day15-数据结构力扣
数据结构·算法·leetcode
Full Stack Developme44 分钟前
Java Simple Serial Connector 教程
java·stm32·单片机
xcs194051 小时前
Java 上位机防空警报系统开发
java·开发语言