算法 – 有效地反转字符数组中的单词(而不是字符)的顺序

栏目: 编程工具 · 发布时间: 7年前

内容简介:http://stackoverflow.com/questions/47402/efficiently-reverse-the-order-of-the-words-not-characters-in-an-array-of-chara

给出一个形成一个单词句子的字符数组,给出一种有效的算法来反转单词(而不是字符)的顺序.

示例输入和输出:

>>> reverse_words("this is a string")
'string a is this'

它应该是O(N)时间,O(1)空格(split(),并且不允许推/堆栈).

这个难题取自 here .

C/C++中的解决方案:

void swap(char* str, int i, int j){
    char t = str[i];
    str[i] = str[j];
    str[j] = t;
}

void reverse_string(char* str, int length){
    for(int i=0; i<length/2; i++){
        swap(str, i, length-i-1);
    }
}
void reverse_words(char* str){
    int l = strlen(str);
    //Reverse string
    reverse_string(str,strlen(str));
    int p=0;
    //Find word boundaries and reverse word by word
    for(int i=0; i<l; i++){
        if(str[i] == ' '){
            reverse_string(&str[p], i-p);
            p=i+1;
        }
    }
    //Finally reverse the last word.
    reverse_string(&str[p], l-p);
}

这应该是O(n)在时间上和O(1)在空间.

编辑:清理一下

字符串的第一遍显然是O(n / 2)= O(n).第二遍是O(n个组合长度的所有字/ 2)= O(n n / 2)= O(n),这使得这是一个O(n)算法.

http://stackoverflow.com/questions/47402/efficiently-reverse-the-order-of-the-words-not-characters-in-an-array-of-chara


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆发

爆发

[美] 艾伯特-拉斯洛·巴拉巴西 / 马慧 / 中国人民大学出版社 / 2012-6 / 59.90元

1. 本书是一本超越《黑天鹅》的惊世之作。如果说塔勒布认为人类行为是随机的,都是小概率事件,是不可以预测的;那么全球复杂网络权威Barabasi则认为,人类行为93%是可以预测的。 2. Barabasi的研究是在人类生活数字化的大数据时代基础上进行的,移动电话、网络以及电子邮件使人类 行为变得更加容易量化,将我们的社会变成了一个巨大的数据库。他认为,人类正处在一个聚合点上,在这里数据、科学......一起来看看 《爆发》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试