Leetcode :844. 比较含退格的字符串(栈)

本文介绍了一种算法,用于比较两个可能包含退格字符的字符串是否相等。通过使用栈来模拟退格操作,文章提供了一个简洁的解决方案,适用于各种编程竞赛和实际应用。

844. 比较含退格的字符串

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

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

示例 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 = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。
示例 4:

输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。

提示:

1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 ‘#’。

这道题用栈来做中规中矩的,很简单,JAVA会比C++好做一些,栈的比较比较容易

class Solution {
    public String build(String S){
        Stack<Character>ans=new Stack();
        for(char c:S.toCharArray()){
            if(c!='#')
            ans.push(c);
            else  if(!ans.empty()){
                ans.pop();
            }
            
        }
    return String.valueOf(ans);
    }
    public boolean backspaceCompare(String S, String T) {
        return build(S).equals(build(T));
        
    }
}
LeetCode 844 题中,使用方法可以直观地模拟字符串中的退格操作。对于输入字符串中的每个字符: - 如果字符不是 `#`,则将其压入中; - 如果字符是 `#`,且不为空,则弹出顶元素。 通过分别处理两个字符串后,比较它们的内容即可判断是否相等。 以下是使用 C++ 实现的完整代码: ```cpp class Solution { public: bool backspaceCompare(string s, string t) { stack<char> stack_s; stack<char> stack_t; for (char c : s) { if (c != '#') { stack_s.push(c); } else if (!stack_s.empty()) { stack_s.pop(); } } for (char c : t) { if (c != '#') { stack_t.push(c); } else if (!stack_t.empty()) { stack_t.pop(); } } return stack_s == stack_t; } }; ``` 该实现中,用于存储处理后的字符,最终通过比较两个的内容判断字符串是否相等。这种方法的时间复杂度为 O(n + m),空间复杂度也为 O(n + m),其中 n 和 m 分别是输入字符串 s 和 t 的长度 [^1]。 ### 方法的实现特点 - **逻辑清晰**:的后进先出特性与退格操作天然契合,能够直观地模拟退格过程。 - **边界处理**:需要特别注意当为空时遇到 `#` 的情况,此时不进行任何操作 [^2]。 - **性能考量**:虽然方法的空间复杂度较高,但其时间效率较好,适用于大多数实际场景。 ### 示例分析 例如,输入字符串 `s = "a#c"` 和 `t = "b"`: - 经过处理后,`s` 会变成 `"c"`,`t` 会变成 `"b"`,因此结果为 `false`。 - 使用方法时,`stack_s` 最终包 `'c'`,而 `stack_t` 包 `'b'`,比较后返回 `false` [^3]。 ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值