leetcode-874 比较含退格的字符串

在这里插入图片描述

力扣打卡
说一下我的思路叭:
一开始希望能用数组直接去进行模拟,但是发现好像擦除的过程比较麻烦,还要去置空。
稍微扫一眼题解,发现这就是一个栈的操作啊。

思路如下:
(1)边界的情况就是如果没字符了,但是任然去删除就会有问题。所以换一个角度说,只有在栈不空,且存在#,才可以删除字符。
(2)关于处理:存在两种方式;1.对stl的元素进行比较,就是迭代器直接进行比较,2.取出栈顶元素top()操作,如果栈顶元素不相同的话,那么就是false。然后pop()继续去进行进行栈顶元素比较

代码如下:

class Solution {
public:

    //现在就是说#可以去退一格
    //就是一种特殊情况,需要计算上去
    //擦出的过程就像是栈啊
    bool backspaceCompare(string S, string T) {
        // stack<char> S_res;
        // stack<char> T_res;
        // int len1=S.size(),len2=T.size();
        // //求解答案,然后再去比价长度
        // for(int i=0;i<len1;i++){
        //     // if(S[i]=='#'){
        //     //     //还有一种操作是前面没有字符,但是仍然删除字符的方式
        //     //     if(S_res.empty()) continue;//处理删不掉的情况
        //     //     S_res.pop();  
        //     // }
            
        //     //这么写不太好,其实就是不空,且#,才可以去弹栈
        //     if(S[i]=='#'&&!S_res.empty()) S_res.pop();
        //     else S_res.push(S[i]);
        // }
        // for(int j=0;j<len2;j++){
        //     // if(T[j]=='#'){
        //     //     //处理特殊的边界情况
        //     //     if(T_res.empty()) continue;
        //     //     T_res.pop();
        //     // }
        //     if(T[j]=='#'&&!T_res.empty()) T_res.pop();
        //     else T_res.push(T[j]);
        // }

        // //处理最终答案
        // if(T_res.size()!=S_res.size()) return false;
        // //接着比较内容
        // for(int l=0;l<T_res.size();l++){
        //     //调用栈顶元素使用的是top()
        //     if(T_res.top()!=S_res.top()){
        //         return false;
        //     } 
        //     T_res.pop(),S_res.pop();
        // } 
        // return true;

        // if(S_res==T_res) return true;
        // else return false;


        stack<char> a,b;
        for(int i=0;i<S.size();i++){
            //只有在有#且不空的时候才可以去进行弹栈
            if(S[i]=='#'&&!a.empty()) a.pop();
            if(S[i]!='#') a.push(S[i]);
        }
        for(int j=0;j<T.size();j++){
            if(T[j]=='#'&&!b.empty()) b.pop();
            if(T[j]!='#') b.push(T[j]);
        }
        //他妈直接比较啊,艹,
        if(a==b) return true;
        else return false;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值