字符串中单词分别逆序

  算法专题导航页面


【题目描述】
    给定字符类型的数组chas,请在单词间做逆序调整。只要做到单词的顺序逆序即可,对空格的位置没有要求。

输入描述:
    输入一行只含字母和空格的字符串,代表chas(1≤length chas≤100000)。

输出描述:
    输出一行字符串,代表逆转顺序后的字符串。


示例1
    输入
        i am a student
    输出
        i ma a tneduts
    备注:
        时间复杂度O(n)O(n),空间复杂度O(1)O(1)。


【代码实现 - C语言版】

#include<stdio.h>

// reverse a string
void reverse(char *str, int begin, int end) {
     
    if (NULL == str) {
     
        printf("Empty string!\n");
    }
    char ch;
    while (begin < end) {
     
        ch = str[begin];
        str[begin] = str[end];
        str[end] = ch;

        begin ++;
        end --;
    }
}


int main() {
     
    char str[100000];
    scanf("%[^\n]", str);
    int begin = 0;
    int index = 0;
    // scan each element of a string
    while ('\0' != str[index]) {
     
        // scan to find a signal word and reverse it
        while (' ' != str[index] && '\0' != str[index]) {
     
            index ++;
        }

        // deal the next char, it maybe ' ' or '\0'
        if (' ' == str[index]) {
     
            reverse(str, begin, index-1);
            // update begin value for next time usage
            begin = index + 1;
            // move to next char
            index ++;
        }

        // deal the last word
        if ('\0' == str[index]) {
     
            reverse(str, begin, index-1);
        }
    }
    
    printf("%s\n", str);
    return 0;
}

你可能感兴趣的:(面试算法,字符串逆序,单词逆序)