字符串按单词逆序

leetcode 151. https://leetcode.com/problems/reverse-words-in-a-string/

Example 1:

Input: "the sky is blue"
Output: "blue is sky the"

Example 2:

Input: "  hello world!  "
Output: "world! hello"
Explanation: Your reversed string should not contain leading or trailing spaces.

Example 3:

Input: "a good   example"
Output: "example good a"
Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.

基本思想为,先逆序整个字符串,然后逆序每个单词。在这个过程中处理多余的空格。In-place算法
class Solution {
public:
    string reverseWords(string s) {
        // reverse whole string
        reverse(s.begin(), s.end());
        // reverse each word
        int i = 0,j = 0, storedIndex = 0;
        while (i < s.size()){
            // put i to the first letter of a word
            while (i < s.size() && s[i] == ‘ ‘) ++i;
            // add a space if this is not the first and last word
            if (i < s.size() && storedIndex != 0) s[storedIndex++] = ‘ ‘;
            j = i;
            // put j to the end of the word
            while (j < s.size() && s[j] != ‘ ‘) ++j;
            // reverse this word. There may be spaces in front of the word, and after reverse it goes to the end.
            // if s contains only space, i == j, reverse will do nothing
            reverse(s.begin()+storedIndex, s.begin()+j);
            // put stored index to the end of the word
            storedIndex += j - i;
            // put i to the start of next search
            i = j;
        }
        // finally, storedIndex will point to the letter next to the last word
        s.erase(s.begin()+storedIndex, s.end());
        return s;
    }
};

  

原文地址:https://www.cnblogs.com/vimery/p/11569204.html

时间: 2024-10-03 17:38:15

字符串按单词逆序的相关文章

【C语言】写一个函数,实现字符串内单词逆序

//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <string.h> #include <assert.h> void reverse_string(char *left, char *right) //连续的字符串逆序 { char temp; while (right > left) { temp = *left; *left = *rig

将字符串按照单词逆序

/*2.将字符串按照单词逆序 输入一段字符串,已知字符串只由字母和空格构成,将字符串按照单词逆序 传入@"welcome to beijing" 返回 @"beijing to welcome" */ + (NSString *)reverseWordsInString:(NSString *)str //{ // NSArray * arr= [str componentsSeparatedByString:@" "]; // NSArray

将字符串依照单词逆序

/*2.将字符串依照单词逆序 输入一段字符串,已知字符串仅仅由字母和空格构成.将字符串依照单词逆序 传入@"welcome to beijing" 返回 @"beijing to welcome" */ + (NSString *)reverseWordsInString:(NSString *)str //{ // NSArray * arr= [str componentsSeparatedByString:@" "]; // NSArray

java小程序之单词逆序

单词逆序问题思路很简单,一个输入字符串,入栈,然后一个出栈追加到一个StringBuilder中,转化为输出字符串. 1 public class Reverse { 2 public static void main(String[] args) { 3 String inputStr = "jintianshiyigehaorizi"; 4 String outputStr = reverse(inputStr); 5 System.out.println(outputStr);/

按单词逆序句子(含标点)

主要思想:先写出单词逆序的函数,再写整个句子逆序的函数(在其中查找单词,找到后调用单词逆序的函数逆序,最后将整个句子逆序). 程序缺点:只能识别几个常用的标点符号 源代码及测试程序: //给定一个字符串,按单词将该字符串逆序,含标点 #include<stdio.h> //start 和 end 之间逆序的函数 void reverse_word(char *start, char *end) { while(start < end) { *start = *start ^ *end;

英文句子中的单词逆序

#include "stdafx.h" #include <iostream> #include <string> #include <stack> using namespace std; int main(int arc, char** argv) { string str="I come from liaoning."; stack<string> works; int len=str.length(); whi

简单的算法编程题-任意段落按照单词逆序输出

把这个问题抛给温州皮鞋厂老板,老板直接就说这个题目的本意是让你提出stack的解决方案. ??what?stack?too low! ??因为这么个问题还要实现一个stack有点场面大了,事实上谁不知道你把一个个单词push进去,然后再pop出来不就好了吗?所以说stack方案太通用,不足挂齿.-周末没事干时折腾点此类问题,没有错,错在拉开蚊帐睡觉时吵醒疯子和小小,事情偶尔会变严重. ??另外,使用C语言完成和使用Java完成完全不同,Java调用现成的class会非常简单,复杂度完全隐藏在了内

C++ 排序函数 sort(),qsort()的含义与用法 ,字符串string 的逆序排序等

上学时我们很多学了很多种排序算法,不过在c++stl中也封装了sort等函数,头文件是#include <algorithm> 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置对应的元素 is_sorted 判断一个区间是否已经排好序 partition 使得符合某个条件的元

php实现字符串翻转,使字符串的单词正序,单词的字符倒序

如字符串'I love you'变成'I evol uoy',只能使用strlen(),不能使用其他内置函数. function strturn($str){ $pstr=''; $sstr=''; for($i=0;$i<strlen($str);$i++){ if($str[$i]==' '){ $pstr=$pstr.$sstr.' '; $sstr=''; }else{ $sstr=$str[$i].$sstr; } } $pstr=$pstr.$sstr; return $pstr;