844. Backspace String Compare(python+cpp)

题目:

Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character.

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 = "#a#c" 
Output: true 
Explanation: Both S and T become "c". 

Example 4:

Input: S = "a#c", T = "b" 
Output: false 
Explanation: S becomes "c" while T becomes "b". 

Note:
1 <= S.length <= 200 1 <= T.
length <= 200
Sand T only contain lowercase letters and'#' characters.
Follow up:
Can you solve it in O(N) time and O(1) space?

解释:
这种题目一看就是用栈来做。
python代码,速度很快但是感觉不太美观:

class Solution(object):
    def backspaceCompare(self, S, T):
        """
        :type S: str
        :type T: str
        :rtype: bool
        """
        new_S=[]
        for s in S:
            if s!="#":
                new_S.append(s)
            else:
                if new_S:
                    new_S.pop()
        new_T=[]
        for t in T:
            if t!="#":
                new_T.append(t)
            else:
                if new_T:
                    new_T.pop()
        return new_S==new_T

c++代码:

#include<stack>
using namespace std;
class Solution {
public:
    bool backspaceCompare(string S, string T) {
        stack<char>stack_S;
        stack<char>stack_T;
        for(auto letter:S)
        {
            if (letter!='#')
                stack_S.push(letter);
            else
                if(!stack_S.empty())
                    stack_S.pop();
        }
        for(auto letter:T)
        {
            if (letter!='#')
                stack_T.push(letter);
            else
                if(!stack_T.empty())
                    stack_T.pop();
        }
        if(stack_S.size()!=stack_T.size())
            return false;
        else
        {
            for (int i=0;i<stack_S.size();i++)
            {
                if (stack_S.top()!=stack_T.top())
                    return false;
                else
                {
                    stack_S.pop();
                    stack_T.pop();
                }
            }
            return true;
        }
    }
};

总结:
好多人用循环做这道题,我还是觉得用栈做最方便,需要注意的是遇到#需要判断当前栈是否为空再决定要不要弹出操作,不然会报错,还有一点是,stack不能用[]去值,只能取得栈顶元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值