---
# System prepended metadata

title: 844. Backspace String Compare
tags: [string, Leetcode, stack, python, c++, easy]

---

###### tags: `Leetcode` `easy` `string` `stack` `python` `c++`

# 844. Backspace String Compare

## [題目連結:] https://leetcode.com/problems/backspace-string-compare/description/

## 題目:
Given two strings ```s``` and ```t```, return ```true``` if they are equal when both are typed into empty text editors. ```'#'``` means a backspace character.

Note that after backspacing an empty text, the text will continue empty.

**Example 1:**
```
Input: s = "ab#c", t = "ad#c"
Output: true
Explanation: Both s and t become "ac".
```
**Example 2:**
```
Input: s = "ab##", t = "c#d#"
Output: true
Explanation: Both s and t become "".
```
**Example 3:**
```
Input: s = "a#c", t = "b"
Output: false
Explanation: s becomes "c" while t becomes "b".
```

## 解題想法:
* 題目為比較兩字串:
    * 其中"#"表示後退鍵，能刪除前一個字元
    * 若字串已空，"#"作用後仍為空

* 直接stack判斷當前字元存入即可

## Python:
``` python=
class Solution(object):
    def backspaceCompare(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        def reBuild(s):
            stack=[]
            for char in s:
                if char!='#':
                    stack.append(char)
                elif char=='#' and stack:
                    stack.pop()
            return "".join(char for char in stack)
            
        newS=reBuild(s)
        newT=reBuild(t)
        return newS==newT
```

## C++:
``` cpp=
class Solution {
public:
    bool backspaceCompare(string s, string t) {
        return reBuild(s)==reBuild(t);
    }

    vector<int> reBuild(string& s){
        vector<int> res;
        for (char val: s){
            if (val!='#')
                res.push_back(val);
            else if (val=='#' && !res.empty())
                res.pop_back();
        }
        return res;
    }
};
```