美文网首页
双指针应用四:翻转字符串里的单词

双指针应用四:翻转字符串里的单词

作者: 程一刀 | 来源:发表于2021-05-08 10:29 被阅读0次

题目地址 https://leetcode-cn.com/problems/reverse-words-in-a-string/

题目描述 给定一个字符串,逐个翻转字符串中的每个单词。
示例 1: 输入: "the sky is blue" 输出: "blue is sky the"
示例 2: 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3: 输入: "a good example" 输出: "example good a" 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

参考代码

#include <iostream>
using namespace::std;

class Solution {
    ///字符串翻转
    void reverse(string &str,int begin ,int end){
        for (int i = begin,j = end; i<j; i++,j--) {
            swap(str[i],str[j]);
        }
    }
    
    /// 删 除 首尾 空格,多余空格
    void deletespate(string &str) {
        int begin = 0;
        while (str[begin] == ' ' && begin < str.size()) {
            begin ++;
        }
        int slow = 0;
        for (;begin < str.size();begin ++) {
            if (str[begin] == ' ' && str[slow -1 ] == ' '  && slow > 1) {
            } else {
                str[slow++] = str[begin];
            }
        }
        if (str[slow - 1] == ' ' && slow >0) {
            str.resize(slow-1);
        } else {
            str.resize(slow);
        }
        
        
    }
public:
    string reverseWords(string s) {
        deletespate(s);
        reverse(s,0,s.size()-1);
        int begin = 0;
        int end = 0;
        for (int i = 0; i< s.size(); i++) {
            if (s[i] == ' ') {
                end = i - 1;
                reverse(s, begin, end);
                begin = i+1;
            } else {
            }
        }
        // 反转最后个单词
        reverse(s, begin, s.size()-1);
        return s;
    }
};

int main(int argc, const char * argv[]) {
    // insert code here...
    
    string str = "  the sky is blue ";
    string aa = Solution().reverseWords(str);
    return 0;
}

参考链接 https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.md

相关文章

  • 双指针应用四:翻转字符串里的单词

    题目地址 https://leetcode-cn.com/problems/reverse-words-in-a-...

  • LeetCode 字符串[L1]

    443. 压缩字符串 双指针一个读一个写 434. 字符串中的单词数 双指针取单词 459. 重复的子字符串 写了...

  • 双指针

    双指针问题总结 双指针经典问题 twoSum (有序数组) 字符串翻转 先看一个例子: leetcode 345....

  • leetCode进阶算法题+解析(二十四)

    翻转字符串里的单词 题目:给定一个字符串,逐个翻转字符串中的每个单词。 示例 1:输入: "the sky is ...

  • 翻转字符串里的单词

    翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1:输入: "the sky is blu...

  • LeetCode: 翻转字符串里的单词

    翻转字符串里的单词 题目叙述 给定一个字符串,逐个翻转字符串中的每个单词。 示例: 输入: "the sky is...

  • LeetCode-151-翻转字符串里的单词

    翻转字符串里的单词 题目描述:给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符...

  • 151. 翻转字符串里的单词

    151. 翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词。 说明: 无空格字符构成一个单词。 输入...

  • 10进阶之路-常用算法

    1.字符串翻转 一个指针指向字符串开头,一个指针指向字符串的结尾。交换指针。 2.链表翻转 头插发。指针指向链表的...

  • 2019-04-05

    151. 翻转字符串里的单词 去空格 多个只保留一个,字符串开始不是空格 单词顺序不变,但是字符串位置发生了翻转 ...

网友评论

      本文标题:双指针应用四:翻转字符串里的单词

      本文链接:https://www.haomeiwen.com/subject/ywsedltx.html