TreeviewCopyright © aleen42 all right reserved, powered by aleen42

58 - I. 翻转单词顺序

https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/

Java

class Solution {

     /**
     * 双指针法
     * 
     * 1.倒序遍历字符串s,记录单词左右索引边界left,right.
     * 2.每确定一个单词的边界,则将其添加到单词列表result中.
     * 3.最后将单词列表拼接为字符串并去除头尾空格,将其返回即可.
     */
    public String reverseWords(String s) {
        // 删除字符串的首尾空格
        s = s.trim();
        // 初始化双指针,使得left与right指向字符串尾字符
        int right = s.length() - 1,left = right;
        StringBuilder result = new StringBuilder();
        // 通过移动左指针来检查字符串中是否含有单词
        while(left >= 0) {
            // left指针向左移动: 寻找第一个空格
            while(left >= 0 && s.charAt(left) != ' ') left--;
            // 将单词添加到result中,并在其后添加空格
            result.append(s.substring(left + 1, right + 1) + " ");
            // 跳过单词之间的空格
            while(left >= 0 && s.charAt(left) == ' ') left --;
            // 使得right指向下一个单词的尾字符
            right = left;
        }
        // 将结果转换为字符串并删除头尾空格
        return result.toString().trim();
    };
}

Python

class Solution(object):

    # 双指针法
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        result = []
        # 去除字符串中的首尾空格
        s = s.strip()
        # 初始化双指针,使得left与right指向字符串的尾字符
        left = right = len(s) - 1
        # 通过移动左指针来检查字符串中是否含有单词
        while left >= 0:
            # left指针向左移动: 寻找第一个空格
            while left >= 0 and s[left] != ' ': left -= 1
            # 将单词添加到结果列表
            result.append(s[left + 1 : right + 1])
            # 跳过单词之间的空格
            while left >= 0 and s[left] == ' ': left -= 1
            # 使得right指向下个单词的尾字符
            right = left
        # 将结果列表用空格拼接为字符串并返回
        return ' '.join(result)
Copyright © GoogTech 2021 all right reserved,powered by GitbookLast update time : 2021-09-15 01:55:05

results matching ""

    No results matching ""