LeetCode 844. 比较含退格的字符串

45 篇文章 1 订阅
24 篇文章 0 订阅

844. 比较含退格的字符串

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

示例 1:
输入:S = “ab#c”, T = “ad#c”
输出:true
解释:S 和 T 都会变成 “ac”。

示例 2:
输入:S = “ab##”, T = “c#d#”
输出:true
解释:S 和 T 都会变成 “”。

示例 3:
输入:S = “a##c”, T = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。

示例 4:
输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。

提示:
1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 ‘#’。

思路分析:这道题只要对两个字符串进行逐个字符判断,看是否为 ’ # ’ 就好了,当字符不为 ’ # ’ 那就只要写入新的字符串,并对字符长度的计数 + 1 即可,若字符为 ’ # ’ ,则需要执行字符的退格 即计数 -1,且判断多次退格情况是否有超出索引边界(<0)。
然后先比较两个新字符串的长度是否一致,若不一致则直接释放新建立的两个字符串内存,且返回 false
若长度一致,将新字符串覆盖原有字符串,通过 memcmp() 比较两个字符串指定长度的内存是否一致

/*
解题语言 C
思路,在读到字母时执行入栈操作,读到 # 字符时执行出栈操作
*/
int  stack(char *arry,char* arry2)
{
	int count = 0;
	while (*arry!='\0')
	{
		if (*arry != '#')
		{
			*(arry2+count) = *arry;
			count++;
		}
		else
		{
            count -= 1;
			if (count <= 0)
				count = 0;
		}
		arry++;
	}
	return count;
}
bool backspaceCompare(char* S, char* T) {
	char *arry_s = (char *)malloc(201*sizeof(char)), *arry_t = (char *)malloc(201 * sizeof(char));
	int count_s = stack(S,arry_s), count_t = stack(T, arry_t);
	if (count_s != count_t)
		{
			free(arry_s); free(arry_t);
			return false;
		}
	else
	{
		int i = 0;
		while (i<count_s)
		{
			*(S + i) = *(arry_s + i);
			*(T + i) = *(arry_t + i);
			i++;
		}
		free(arry_s); free(arry_t);
		return (memcmp(S, T, count_s) == 0);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值