牛客-倒置字符串

1.题目描述

2.题目链接

倒置字符串_牛客题霸_牛客网

3.代码解答

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        
        // 按空格分割单词(处理多个连续空格的情况,split(" +") 匹配一个或多个空格)
        String[] words = s.split(" +");
        
        // 反转单词数组
        int left = 0;
        int right = words.length - 1;
        while (left < right) {
            // 交换左右指针的单词
            String temp = words[left];
            words[left] = words[right];
            words[right] = temp;
            left++;
            right--;
        }
        
        // 拼接反转后的单词数组
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < words.length; i++) {
            result.append(words[i]);
            // 最后一个单词后不添加空格
            if (i != words.length - 1) {
                result.append(" ");
            }
        }
        
        System.out.println(result.toString());
    }
}

4.解题思路

1)字符串数组逆序

先把输入的原字符串读入String类型的字符串中,再以正则表达式匹配到的一个或者多个的空格为分界符读入字符串数组中,最后以字符串数组中的字符串元素为单位,逆序排列。

2)双重逆序

先把整个字符串逆序,再对每一个单词进行逆序。但是算法题目中的StringBuilder的reverse方法并不支持部分逆序,只支持全部逆序。在二次逆序的时候,算法题目中的Stringbuilder的subString方法也支持只有start这一种。很不方便而且时间复杂度极高。

5.代码细节

1)正则表达式处理多个空格的情况,同时split方法分割字符串为字符串数组

java 复制代码
// 按空格分割单词(处理多个连续空格的情况,split(" +") 匹配一个或多个空格)
        String[] words = s.split(" +");

2)最后一个字符串数组元素后面不需要拼接空格

java 复制代码
// 最后一个单词后不添加空格
            if (i != words.length - 1) {
                result.append(" ");
            }
相关推荐
无限进步_17 分钟前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬34 分钟前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
cwplh37 分钟前
DP 优化二:斜率优化 DP
算法·动态规划
Hcoco_me1 小时前
大模型面试题90:half2,float4这种优化 与 pack优化的底层原理是什么?
人工智能·算法·机器学习·langchain·vllm
浅念-1 小时前
链表经典面试题目
c语言·数据结构·经验分享·笔记·学习·算法
Python算法实战1 小时前
《大模型面试宝典》(2026版) 正式发布!
人工智能·深度学习·算法·面试·职场和发展·大模型
菜鸟233号2 小时前
力扣213 打家劫舍II java实现
java·数据结构·算法·leetcode
狐573 小时前
2026-01-18-LeetCode刷题笔记-1895-最大的幻方
笔记·算法·leetcode
Q741_1473 小时前
C++ 队列 宽度优先搜索 BFS 力扣 662. 二叉树最大宽度 每日一题
c++·算法·leetcode·bfs·宽度优先
Pluchon3 小时前
硅基计划4.0 算法 动态规划进阶
java·数据结构·算法·动态规划