Day8:代码随想录算法训练营第八天|344. 反转字符串| 541.反转字符串II| 剑指Offer 05.替换空格

344.反转字符串

题目链接:344. 反转字符串 - 力扣(LeetCode) 

Day8:代码随想录算法训练营第八天|344. 反转字符串| 541.反转字符串II| 剑指Offer 05.替换空格_第1张图片 

题解:

本题运用双指针法进行求解,设置开头一个指针和最后一个指针,然后前后向中间靠拢,最后进行交换即可。

 C代码如下:

void reverseString(char* s, int sSize){
     int left = 0;
     int right = sSize - 1;


     while(left < right) {
            char temp = s[left];
            s[left++] = s[right];
            s[right--] = temp;
            }
}

541.反转字符串II

题目链接:541. 反转字符串 II - 力扣(LeetCode)

Day8:代码随想录算法训练营第八天|344. 反转字符串| 541.反转字符串II| 剑指Offer 05.替换空格_第2张图片

 题解:

i+=(2*k),i每次移动2*k个,然后判断是否需要有反转的区间。

C代码如下:

char * reverseStr(char * s, int k){
    int len = strlen(s);


    for(int i = 0;i < len; i += (2 * k)) {
        k = i + k > len ? len - i : k;

        int left = i;
        int right = i + k - 1;
        while (left < right) {
                char temp = s[left];
                s[left++] = s[right];
                s[right--] = temp;
              }
      }
return s;
}

剑指Offer 05.替换空格

题目链接: 剑指 Offer 05. 替换空格 - 力扣(LeetCode)

Day8:代码随想录算法训练营第八天|344. 反转字符串| 541.反转字符串II| 剑指Offer 05.替换空格_第3张图片 题解:

本题运用双指针法,首先扩充数组到每个空格替换成%20之后的大小,然后从后向前替换空格

 C代码如下:

char* replaceSpace(char* s){
   int count = 0;
   int len = strlen(s);
   for (int i = 0; i < len; i++) {
        if(s[i] == ' ') {
                count++;
            }
}
   

    int newLen = len + count * 2;
    char* result = malloc(sizeof(char) * newLen + 1);

    for (int i = len - 1, j = newLen - 1; i >= 0; i--,j--) {
            if (s[i] != ' ') {
                  result[j] = s[i];
            }else {
                 result[j--] = '0';
                 result[j--] = '2';
                 result[j] = '%';
            }
           }
        result[newLen] = '\0';
         
         return result;
}

你可能感兴趣的:(算法)