**********

541. 反转字符串 II

54. 替换数字

**********

思路

将s对折,前后对应交换(有点简单,规范一点可以写成双指针)

代码

void reverseString(char* s, int sSize) {
    int l = sSize / 2;
    char temp;
    for (int i = 0; i < l; i++) {
        temp = s[i];
        s[i] = s[sSize - 1 - i];
        s[sSize - 1 - i] = temp;
    }
    return;
}

541. 反转字符串 II

思路

一开始是想设置很多标记记录第几个k了之类的,敲代码之前来了解析,改成了卡尔哥说的办法。 让i每次更新2k更方便,然后正常翻转就行了

代码

char* reverseStr(char* s, int k) {
    int l = strlen(s);
    for (int i = 0; i < l; i += 2 * k) {
        if (i >= l)
            break;
        int left, right;
        left = i;
        right = i + k - 1;
        if (right >= l)
            right = l - 1;
        while (left <= right) {
            char temp = s[left];
            s[left++] = s[right];
            s[right--] = temp;
        }
    }
    return s;
}

54. 替换数字

思路

NULL

代码

#include <stdio.h>
#include <string.h>
#define MAXsize 10000
int main(void)
{
	char s[MAXsize];
	char ans[2 * MAXsize];
	memset(ans, 0, sizeof(char) * (2 * MAXsize));
	scanf("%s", &s);
	int len = strlen(s);
	for (int i = 0; i <= len; i++)
	{
		if (s[i] >= '0' && s[i] <= '9')
		{
			sprintf(ans + strlen(ans), "number");
		}
		else
		{
			ans[strlen(ans)] = s[i];
		}
	}
	printf("%s\n", ans);
	return 0;
}