leetcode-08-[151]翻转字符串里的单词[卡码网55]右旋转字符串

一、151翻转字符串里的单词

重点:见注释

java 复制代码
class Solution {
    public String reverseWords(String s) {
        //1、移除多余的空格
        StringBuilder stringBuilder = removeSpace(s);
        //2、反转整个字符串
        reverse(stringBuilder,0,stringBuilder.length()-1);
        //3、反转每个单词
        reverseEachWord(stringBuilder);
        return stringBuilder.toString();
    }
    StringBuilder removeSpace(String s){
        StringBuilder stringBuilder=new StringBuilder();
        int left=0,right=s.length()-1;
        while(s.charAt(left)==' '){
            left++;
        }
        while(s.charAt(right)==' '){
            right--;
        }
        for(int i=left;i<right+1;i++){
            if(s.charAt(i)!=' '){
                stringBuilder.append(s.charAt(i));
            }else if(stringBuilder.charAt(stringBuilder.length()-1)!=' '){
                //若结束位置不为空格,则加个空格,否则什么也不做
                stringBuilder.append(s.charAt(i));
            }
        }
        return stringBuilder;
    }
    //设置开始结束的标记
    void reverse(StringBuilder stringBuilder,int left,int right){
        while(left<right){
            char tmp = stringBuilder.charAt(left);
            //设置值setCharAt
            stringBuilder.setCharAt(left,stringBuilder.charAt(right));
            stringBuilder.setCharAt(right,tmp);
            left++;
            right--;
        }
    }
    //注意一下
    void reverseEachWord(StringBuilder stringBuilder){
        int left=0,right=1;
        int n=stringBuilder.length();
        while(left<n){
            while(right<n&&stringBuilder.charAt(right)!=' '){
                right++;
            }
            reverse(stringBuilder,left,right-1);
            left=right+1;
            right=left+1;
        }
    }

}

二、卡码网55右旋转字符串

重点:技巧

反转三次

java 复制代码
import java.util.Scanner;

public class Main{
    public static void main (String[] args) {
        Scanner in=new Scanner(System.in);
        int n=Integer.parseInt(in.nextLine());
        String s=in.nextLine();
        int len=s.length();
        char[] chars=s.toCharArray();
        reverse(chars,0,len-1);
        reverse(chars,0,n-1);
        reverse(chars,n,len-1);
        System.out.println(chars);
    }
    public static void reverse(char[] ch,int start,int end){
        while(start<end){
            char tmp=ch[start];
            ch[start]=ch[end];
            ch[end]=tmp;
            start++;
            end--;
        }
    }
}
相关推荐
小江的记录本39 分钟前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处43 分钟前
Java从零到熟练(三):流程控制
java·开发语言·python
唐青枫1 小时前
Java Optional 实战指南:优雅处理空值与链式转换
java
一起学开源1 小时前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
云泽8082 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
wlsh152 小时前
Go 迭代器
算法
逍遥德2 小时前
MQTT教程详解-04.SpringBoot集成MQTT(告别手动控制)
java·spring boot·物联网·中间件·iot·iotdb
语戚2 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
我命由我123453 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
CS创新实验室3 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法