代码随想录刷题-Day8-字符串(补充)

代码随想录刷题-Day8-字符串(补充)

leetcode-344.反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

若可以额外分配空间协助解决则新声明一个相同大小的数组即可,题目要求不能额外分配空间,使用双指针法。

void reverseString(char* s, int sSize){
    //printf("%d",sSize);
    int left=0;
    int right=sSize-1;
    while(left<right){
        char a=s[left];
        s[left]=s[right];
        s[right]=a;
        left++;
        right--;
    }
}

leetcode-541.反转字符串||

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

char * reverseStr(char * s, int k){
    int len=strlen(s);
    //printf("%d",len);
    int left=0;
    //int right=0;
    while(left<len){
        if(k>(len-left)){   //剩余不足k个,全部反转
            int lef=left;
            int mid=len-1;
            while(lef<mid){
                char a=s[lef];
                s[lef]=s[mid];
                s[mid]=a;
                lef++;
                mid--;
            }
        }
        else{               //剩余超过k个,反转前k个
            int lef=left;
            int mid=left+k-1;
            while(lef<mid){
                char a=s[lef];
                s[lef]=s[mid];
                s[mid]=a;
                lef++;
                mid--;
            }          
        }
        left+=2*k;
    }
    return s;
}

leetcode-151.反转字符串中的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串
s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-words-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

C语言取出字符串中间连续空格方法待确认。

char * reverseWords(char * s){
    char ret[10000]={0};
    while(s[0]==' '){
        s++;
    }
    int len=strlen(s);
    
    int left=0;
    int right=len-1;
    while(s[right]==' '){
        s[right--]='\0';
        len--;
    }
    //len=strlen(s);
    while(left<right){  //字符反转
        char a=s[right];
        s[right]=s[left];
        s[left]=a;
        left++;
        right--;       
    }
    //单词内反转
    int i;
    left=0;
    right=len-1;
  
    for(i=0;i<=len;i++){
        if(s[i]==' ' || i==len){
            int i_l=left;
            int i_r=i-1;
            while(i_l<i_r){
                char a=s[i_r];
                s[i_r]=s[i_l];
                s[i_l]=a;
                i_l++;
                i_r--;
            }
            left=i+1;

        }

    }

    return s;

}

你可能感兴趣的:(leetcode,算法,c++)