力扣新手村赎金信C语言完成

 先上代码截图,代码感觉很笨,回头改进

bool canConstruct(char * ransomNote, char * magazine){
	char char1 = ' ';
	char* p1 = ransomNote;
	while (*p1 != '\0') {
		p1++;
	}
	int ransomSize = p1 - ransomNote;
	char* p2 = magazine;
	while (*p2 != '\0') {
		p2++;
	}
	int magaSize = p2 - magazine;
	char compareArr[1000] = { '0' };
	if (ransomSize > magaSize) {
		return false;
	}
	else {
		for (int i = 0;i < ransomSize;i++) {
			char1 = ransomNote[i];
			for (int j = 0;j < magaSize;j++) {
				if (char1 == magazine[j]) {
					ransomNote[i] = '0';
					magazine[j] = '0';
					break;
				}
			}
		}
	}
	for (int i = 0;i <= ransomSize;i++) {
		if (i < ransomSize)
			compareArr[i] = '0';
		else compareArr[i] = '\0';
	}
	if (!strcmp(ransomNote,compareArr))
		return true;
	else return false;
}

说一下思路。

首先求出题目给的ransomNote和magazine的长度

	char* p1 = ransomNote;
	while (*p1 != '\0') {
		p1++;
	}
	int ransomSize = p1 - ransomNote;
	char* p2 = magazine;
	while (*p2 != '\0') {
		p2++;
	}
	int magaSize = p2 - magazine;
	if (ransomSize > magaSize) {
		return false;
	}

如果ransomNote的长度大于magazine的长度那么直接返回false。

否则的话使用两个for循环去遍历两个字符数组

	else {
		for (int i = 0;i < ransomSize;i++) {
			char1 = ransomNote[i];
			for (int j = 0;j < magaSize;j++) {
				if (char1 == magazine[j]) {
					ransomNote[i] = '0';
					magazine[j] = '0';
					break;
				}
			}
		}
	}

第一个for用来遍历ransomNote,第二个for遍历magazine;

当检测到ransomNote[i] = magazine[j]时,将这两个字符修改为0

我看别人都是用的删除,但我不会,所以改成0=.=

然后定义一个字符数组

char compareArr[1000] = {'0'};

我一开始定义的时27,后面提交错误,力扣最后测试用的字符串是一大堆a,超出了27的长度,我懒得写个不定长度数组了,就直接给了个1000.

然后把compareArr按照ransomNote的长度赋值0.

最后用compareArr字符数组和ransomNote字符数组做比较

若相同则返回true,不同返回false

	if (!strcmp(ransomNote,compareArr))
		return true;
	else return false;

结束。

C语言并不存在字符串,字符串是以字符数组的形式,将每个字符保存在一个数组中,我对这个题中的字符串中单个字符操作的思路主要来自这个原因。

C语言新手,大佬点评别太狠,,,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值