leetcode151.翻转字符串里的单词

151.翻转字符串里的单词

//交换两个元素
void swap(char* a,char* b){
    char temp=*a;
    *a=*b;
    *b=temp;
}
//反转指定范围的字符串
void reverseStringAb(char* s, int left,int right) {
    int mid=(left+right)/2;
    for(;left<=mid;left++){
        swap(&s[left],&s[right]);
        right--;
    }
}  
//反转字符串的函数
void reverseString(char* s, int sSize) {
    int left=0,right=sSize-1;
    for(;left<sSize/2;left++){
        swap(&s[left],&s[right]);
        right--;
    }
}
//删除多余空格
void deleteExtraSpace(char* s){
    int length= strlen(s);
    int slow=0,fast=0;
    for(;fast<length;fast++){
        if (s[fast] != ' ') {

            //对开头处的特殊处理
            if(slow!=0){
                s[slow]=' ';
                slow++;
            }
            //后面一个判断可以保证在一个单词复制完跳出循环
            while( fast<length && s[fast] != ' '){
                s[slow]=s[fast];
                slow++;
                fast++;
            }
        }
        
        重要!!!!!!
        //如果没有这个操作,那么新的字符数组的大小会出现问题,
        //因为删除的空格也是字符元素
        //删除之后肯定要人为的把字符数组的大小给缩小。
        //所谓的删除也只是用别的有用的元素把空格给覆盖掉,所以
        s[slow]='\0';
    }
}
char* reverseWords(char* s) {
    int length= strlen(s);
    reverseString(s,length);
    deleteExtraSpace(s);
    int slow=0;
    //这里一定要有等于即i<=length 如数组the sky is blue长度为15
    //                      在内存中是the sky is blue\0
    //                    e的数组下标为14。\0的下标为15
    //如果没有等于那么就会提前跳出循环,进而导致最后一个单词没有逆转,从而出现blue is sky eht
    
    for(int i=0;i<=length;i++){
        //就是用i在判断一个单词是否结束,当i指向'空格'或者一个字符串的末尾'\0'可以判断当前单词结束,
        // 如果少了i<=length就会导致 s[i]不会等于'\0',进而出现bug
        if(s[i]==' ' ||s[i]=='\0'){
            reverseStringAb(s,slow,i-1);
            slow=i+1;
        }
    }
    return s;
}
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值