• leetcode刷题日志-151反转字符串中的单词


    给你一个字符串 s ,请你反转字符串中 单词 的顺序。

    单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

    返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

    注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

    示例 1

    输入:s = “the sky is blue”
    输出:“blue is sky the”
    示例 2:

    输入:s = " hello world "
    输出:“world hello”
    解释:反转后的字符串中不能存在前导空格和尾随空格。
    示例 3

    输入:s = “a good example”
    输出:“example good a”
    解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

    提示:

    • 1 <= s.length <= 104
    • s 包含英文大小写字母、数字和空格 ’ ’
    • s 中 至少存在一个 单词

    进阶:如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1) 额外空间复杂度的 原地 解法。
    在这里插入图片描述
    思路,使用api,详细看代码注释

    class Solution {
        public String reverseWords(String s) {
            s = s.trim();//trim()函数清除头尾空格
            String[] str = s.split("\\s+");//正则表达式匹配连续空格分割
            for(int i=0, j=str.length-1;i<j;i++,j--)//双指针交换
            {
                String tempstr = "";
                tempstr = str[i];
                str[i] = str[j];
                str[j] = tempstr;
            }
            StringBuilder sb = new StringBuilder();//字符串连接
            for(int i=0;i<str.length;i++)
            {
                if (str[i] != " ")
                    sb.append(str[i]);
                if(i != str.length-1)
                    sb.append(" ");
            }
            return sb.toString();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    Spring Boot实现热部署有哪几种方式
    颠覆性语音识别:单词级时间戳和说话人分离 | 开源日报 No.53
    最小二乘法,加权最小二乘法,迭代重加权最小二乘法
    新版IDEA没有办法选择Java8版本解决方法
    Mybatis知识点记录
    【test】文章测试
    【C++】List -- 详解
    idea2023和历史版本的下载
    使用VSCODE 调试ros2具体设置
    尚医通 (二十八) --------- 医院管理相关 (引入注册中心、远程调用)
  • 原文地址:https://blog.csdn.net/qq_43514707/article/details/134464947