当前位置 博文首页 > 码农在途的博客:LeetCode 844. 比较含退格的字符串

    码农在途的博客:LeetCode 844. 比较含退格的字符串

    作者:[db:作者] 时间:2021-08-14 18:13

    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);
    	}
    }
    
    cs