算法练习Day11

116 阅读1分钟

题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足 1≤n≤1000

题目来源

题目来源(www.nowcoder.com/practice/48…)

输入描述

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述

得到逆序的句子

输入:
I am a boy
输出:
boy a am I
    
输入:
nowcoder
输出:
nowcoder

思路

本题也采用双指针法,从后往前一个遍历找空格,一个原地不动,最后两个指针中间的即为正序单词

具体实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
#include<stdlib.h>
#include <iostream>
using namespace std;
​
int main() {
    string str;
    getline(cin, str);
    int i = str.length();
    int m = i - 1, j = i - 1;
    for (j; j >= 0; --j) {
        if (str[j] == ' ') {
            int k = j + 1 ;
            for (k; k <= m; k++)
                printf("%c", str[k]);
            m = j - 1;
            printf(" ");
        }
        if (j == 0) {
            int k = j;
            for (k; k <= m; k++)
                printf("%c", str[k]);
        }
    }
    return 0;
}
​

时间复杂度

时间复杂度为O(n)

小结

没有将两种情况统一起来,代码显的长了一点,希望改进