您的位置:首页 > 其它

leetcode-151 Reverse Words in a String

2015-03-08 15:53 309 查看
解题思路:

1 O(n) runtime O(n) space

从字符串尾部开始扫描,记录单词的开始和结束位置

<span style="font-family:Microsoft YaHei;font-size:14px;">void reverseWords(char *s) {
    int len = strlen(s);
    char *str = (char *)malloc(sizeof(char) * len + 1);
    int i,j,k,m;
    j = len;
    k = 0;
    for(i = len -1; i >= 0; i--){
        if(s[i] == ' '){
            j = i;
        }else if(i == 0 || s[i-1] == ' '){
            if(k != 0) str[k++] = ' ';
            for(m = i; m < j; m++){
                str[k++] = s[m];
            }
           
        }
    }
    str[k] = '\0';
    strcpy(s,str); //注意,不要使用s = str;
}</span>


写这段代码的时候容易出错,有几个地方要特别注意

2 O(n) runtime O(1) space

两次反转。先将整个句子反转,然后每个单词反转。本来思想比较简单直接,扫描两遍即可O(N)。空格的处理坑死人。 注意处理句子两头的空格,单词间隔中间多个空格的压缩成一个空格。

例如:the sky is blue

第一次反转(整个句子):eulb si yks eht

第二次反转(每个单词):blue is sky the

补充:

关于C语言的字符数组初始化化

char amessage[] = "hello world!"

与 char *pmessage = "hello world!"

的区别,需要注意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: