• 【leetcode】反转字符串中的单词 III


    /*方法一:使用额外空间
    思路与算法

    开辟一个新字符串。然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。如此循环多次,直到遍历完原字符串,就能得到翻转后的结果。*/


    char
    * reverseWords(char * s){ int len = strlen(s); char* Rets = (char*)calloc(len+1,sizeof(char)); int left=0,right=0,n=0; for (int i=0; i<len; i++) { if (s[i] == ' ') { right = i-1; for (int j=right; j>=left; j--) Rets[n++] = s[j]; Rets[n++] = ' '; left = i+1; } else if(i == len-1) { right = i; for (int j=right; j>=left; j--) Rets[n++] = s[j]; } } return Rets; }
    /*方法二:原地解法
    思路与算法
    
    此题也可以直接在原字符串上进行操作,避免额外的空间开销。当找到一个单词的时候,我们交换字符串第一个字符与倒数第一个字符,随后交换第二个字符与倒数第二个字符…… 如此反复,就可以在原空间上翻转单词。
    
    需要注意的是,原地算法在某些语言(比如 Java,JavaScript)中不适用,因为在这些语言中 String 类型是一个不可变的类型。*/
    
    
    char* reverseWords(char* s) {
        int length = strlen(s);
        int i = 0;
        while (i < length) {
            int start = i;
            while (i < length && s[i] != ' ') i++;
            int left = start, right = i - 1;
            while (left < right) {
                char tmp = s[left];
                s[left++] = s[right], s[right--] = tmp;
            }
            while (i < length && s[i] == ' ') i++;
        }
        return s;
    }
  • 相关阅读:
    关键词提取算法TextRank
    我的博文目录整理
    Windows Azure一些小技巧集合
    js数组和树互转
    this.props.form.validateFields回调不执行问题
    d3的4.x与3.x版本的区别
    d3提示框,虚线,选择区域
    d3布局
    d3文件导入和导出
    d3交互
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13626619.html
Copyright © 2020-2023  润新知