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

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

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


}
相关推荐
大侠归来1 小时前
C 语言 | 在函数中操作数组
c语言·c++·算法
怕浪猫6 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i7 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J8 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
leikooo8 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
weixin_307779139 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
Ivanqhz9 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
朝朝辞暮i9 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
沙漠之主10 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
朝朝辞暮i10 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法