LeetCode--151. 翻转字符串里的单词(字符串翻转,字符串分割)

翻转字符串里的单词(双指针,字符串分割)

1. 题目描述

难度:中等
在这里插入图片描述
在这里插入图片描述

2. 题目分析

这道题我们需要注意的点有以下几个:

  • 每个单词之间都要有一个并且仅有一个空格
  • 翻转之后的字符串首尾两端要去电空格
  • 使用O(1)的空间

只使用O(1)的额外空间的话,只能在原数组上进行转换:

  • 字符串翻转法(C)
    利用双指针对对字符串进行整体翻转,如果对输入“the sky is blue” 翻转之后为“eulb si yks eht”。之后在对每个单词进行反转,结果为“blue is sky the”,就完成了。在翻转的时候对多余的空格进行去除即可。
  • 字符串分割法(Python)
    字符串的题目利用python是很方便的,可以先对字符串进行分割,然后在反转合成新的字符串即可。

3. C语言实现

代码如下:

// 去除指定位置的yuansu
char * removeSpaces(char *s, int index){
    int len = strlen(s);
    for(int i = index; i < len-1; i++){
        s[i] = s[i+1];
    }
    s[len-1] = '\0';
    return s;
}
char * reverseWords(char * s){
    int len = strlen(s);
    if(len == 0) return s;
    if(len == 1) return s[0]==' '? "":s;
    int left=0, right=len-1, index, count = 0;
    char temp;
    // 去除字符串两边的空格
    while(s[right] == ' '){
        right--;
        if(right == -1) return "";
    }
    while(s[left] == ' '){
        left++;
    }
    for(int i = 0; i <= right-left; i++){
        s[i] = s[i+left];
    }
    s[right-left+1] = '\0';
    len = strlen(s);
    left = 0;
    right = len -1;
    // 翻转整个字符串
    while(left < right){
        temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        left++;
        right--;
    }

    // 去除中间多余的空格
    for(int i = 0; i < len; i++){
        if(s[i] == ' '){
            if(count > 0){
                s = removeSpaces(s, i);
                len = strlen(s);
                i--;
            }
            else count++;
        }
        else count = 0;
    }

    // 转换每个单词
    left = 0;
    right = 0;
    for(int i = 0; i < len; i++){
        if(s[i] == ' ' || i == len-1){
            right = i==len-1?i:i-1;
            while(left < right){
                temp = s[left];
                s[left] = s[right];
                s[right] = temp;
                left++;
                right--;
            }
            left = i+1;
        }
    }

    return s;

}

运行结果为:
在这里插入图片描述

4. Python实现

代码如下:

class Solution:
    def reverseWords(self, s: str) -> str:
    	# 分割字符串
        tem = s.split(' ')
        res = ''
        # 去除tem 中的空元素
        while '' in tem :
            tem .remove('')
        # 合成新的字符串
        for i in range(len(tem )):
            res  = res  + tem [len(tem )-1-i] + ' '
        return res [:-1]

运行结果为:
在这里插入图片描述

发布了163 篇原创文章 · 获赞 188 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42580947/article/details/104950090
今日推荐