844. 比较含退格的字符串

该博客主要介绍了LeetCode第844题——比较含退格的字符串的解决方案。通过使用Java的栈数据结构,分别获取两个字符串`s`和`t`在忽略退格字符后的实际值,并进行比较。首先,对于每个字符串,遍历并处理其中的字符,遇到'#'则从栈中弹出一个字符,直至栈为空或遇到非'#'字符。然后,利用`equalStack`方法比较两个栈是否相等,即内容相同的字符串。这种方法有效地解决了题目要求的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

力扣算法之844. 比较含退格的字符串

BP算法(用java stack找到String s和t的实际值,再用java stack 作对比)

class Solution {
public static boolean backspaceCompare(String s, String t) {
        int len1 = s.length();
        // error 不可取
        // int len2 = t.length();
        // if(len1!=t.length())return false;
        
        // 获取s的实际值
        Stack<Character> ss = new Stack();
        ss = getRealValueOfString(s);
        // for(int i=0; i<s.length();++i){
        //     if(s.charAt(i)!='#'){
        //     ss.push(s.charAt(i));
        //     }else{
        //         if(ss.empty()){
        //             ss.push('#'); // 先装填,再移出
        //             ss.pop();
        //         }else{
        //             ss.pop();
        //         }
        //     }
        // }
        
        // 获取t的实际值
        Stack<Character> tt = new Stack();
        tt = getRealValueOfString(t);
        // for(int i=0; i<t.length();++i){
        //     if(t.charAt(i)!='#'){
        //        tt.push(t.charAt(i));
        //     }else{
        //          if(tt.empty()){
        //              tt.push('#'); // 先装填,再移出
        //              tt.pop();
        //          }else{
        //             tt.pop();
        //          }
        //     }
        // }

        return equalStack(ss,tt);
    }
    
    public static Stack<Character> getRealValueOfString(String s){
        Stack<Character> ss = new Stack();
        for(int i=0; i<s.length();++i){
            if(s.charAt(i)!='#'){
            ss.push(s.charAt(i));
            }else{
                if(ss.empty()){
                    ss.push('#'); // 先装填,再移出
                    ss.pop();
                }else{
                    ss.pop();
                }
            }
        }
        return ss;
    }
    
    public static boolean equalStack(Stack<Character>s, Stack<Character>t){
        if(s.size()!=t.size())return false;
        while(!s.empty()&&!t.empty()){
            if(s.peek()==t.peek()){
                s.pop();
                t.pop();
            }else{
                return false;
            }
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值