力扣 leetcode 844. 比较含退格的字符串

问题描述

给定 st 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

提示:

  • 1 <= s.length, t.length <= 200
  • s 和 t 只含有小写字母以及字符 '#'

进阶:

你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?

示例

示例 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 = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。

解题思路

本题可以先比较两个字符串 s 和 t 删除字符之后的长度,如果这两个字符串长度不同,直接返回 false 。

class Solution {
public:
    bool backspaceCompare(string s, string t) {
        int a = 0, b = 0;
        for(int i = 0; i < s.size(); i++){
            if(s[i] == '#'){
                a--;
                if(a < 0){
                    a = 0;
                }
            }
            else{
                s[a++] = s[i];
            }
        }
        for(int i = 0; i < t.size(); i++){
            if(t[i] == '#'){
                b--;
                if(b < 0){
                    b = 0;
                }
            }
            else{
                t[b++] = t[i];
            }
        }
        if(a != b){
            return false;
        }
        for(int i = 0; i < a; i++){
            if(s[i] != t[i]){
                return false;
            }
        }
        return true;
    }
};
posted @ 2022-12-01 20:34  greatestchen  阅读(20)  评论(0编辑  收藏  举报