1.7 LeetCode总结(线性表)字符串类

编程总结

在专栏日刻一诗中有初级关于字符串处理函数的介绍,而本专栏强化学习是进阶篇,将记录一些刷题实际遇到的“坑”

541. 反转字符串 II

在这里插入图片描述

void swap(char *a, char *b) {
	char tmp = *a;
	*a = *b, *b = tmp;
}

void reverse(char *l, char *r) {
	while (l < r) {
		swap(l++, r--);
	}
}

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

	for (int i = 0; i < n; i += 2 * k) {
		resNum = n - i;
		if (resNum < k) {
			reverse(&s[i], &s[n - 1]); // 注意这里的减1,我们 reverse函数是直接操作下标
		}
		else if (resNum >= 2 * k) {
			reverse(&s[i], &s[i + k - 1]); // 注意这里的减1,我们 reverse函数是直接操作下标
		}
		else if (resNum < 2 * k && resNum >= k) { // 注意这里的减1,我们 reverse函数是直接操作下标
			reverse(&s[i], &s[i + k - 1]);
		}
	}

	return s;
}

思路, LeetCode 的题一定要有一个统筹的观念,起初做这题时,一直陷入在各个条件的判断中,衍生了很多不必要的操作代码
下面这两个函数处理手法也可以记住:

// 交换
void swap(char *a, char *b) {
	char tmp = *a;
	*a = *b, *b = tmp;
}
// 反转
void reverse(char *l, char *r) {
	while (l < r) {
		swap(l++, r--);
	}
}

1071. 字符串的最大公因子

在这里插入图片描述
解题思路 如果两个字符串之间存在最大公因子:
(1) 短串一定是和在长串的前strlen(短串)字符组成的子串相同;
(2) 长串不断减去短串,得到的两个字符串(原有短串和差串)同样满足(1)中关系;
(3) 当等到的两个串相同时,即为最大公因子。
(https://img-blog.csdnimg.cn/b9a00aa2104a43519a4114bcfc29ea4f.png)

char *gcdOfStrings(char *str1, char *str2)
{
	char *lger = strlen(str1) > strlen(str2) ? str1 : str2;
	char *sher = strlen(str1) > strlen(str2) ? str2 : str1;

	if (strcmp(lger, sher) == 0) {
		return sher;
	}

	if (strncmp(lger, sher, strlen(sher)) != 0) {
		return "";
	}

	// +strlen(sher) 指针后移sher的长度,去到lger中后半段
	return gcdOfStrings(lger + strlen(sher), sher);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值