首页 > 其他分享 >力扣---844. 比较含退格的字符串

力扣---844. 比较含退格的字符串

时间:2023-03-10 17:22:51浏览次数:39  
标签:p2 844 false --- p1 deQue2 return deQue1 退格

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。

示例 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 = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。

提示:
    1 <= s.length, t.length <= 200
    s 和 t 只含有小写字母以及字符 '#'

进阶:
    你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/backspace-string-compare
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

两种方法,一是栈,二是双指针。

栈:

class Solution {
    public boolean backspaceCompare(String s, String t) {
        Deque<Character> deQue1 = new LinkedList<>();
        Deque<Character> deQue2 = new LinkedList<>();
        for (char c : s.toCharArray()) {
            // 遇到#后栈顶出栈
            if (c == '#') {
                // 避免开头就是#时出现空指针异常
                if (!deQue1.isEmpty()) {
                    deQue1.pop();
                }
                // 入栈
            } else {
                deQue1.push(c);
            }
        }
        for (char c : t.toCharArray()) {
            if (c == '#') {
                if (!deQue2.isEmpty()) {
                    deQue2.pop();
                }
            } else {
                deQue2.push(c);
            }
        }
        while (!deQue1.isEmpty() || !deQue2.isEmpty()) {
            // 有一方已经空了,但另一个还有字符,意味着两者不相等
            if (deQue1.isEmpty() || deQue2.isEmpty()) {
                return false;
                // 栈顶元素不同
            } else if (deQue1.pop() != deQue2.pop()) {
                return false;
            }
        }
        return true;
    }
}

 

 

class Solution {
    // 有效元素:需要进行比较的元素。
    // 无效元素:#以及需要被退格的元素。
    public boolean backspaceCompare(String s, String t) {
        // 指针
        int p1 = s.length() - 1;
        int p2 = t.length() - 1;
        // 计数器
        int sum1 = 0;
        int sum2 = 0;
        while (p1 >= 0 || p2 >= 0) {
            // 计数器归零
            sum1 = 0;
            sum2 = 0;
            // 避免空指针异常
            while (p1 >= 0) {
                if (s.charAt(p1) == '#') {
                    sum1 ++;
                } else {
                    sum1 --;
                    // 计数器小于零,说明当前元素时有效元素
                    if (sum1 < 0) {
                        break;
                    }
                }
                p1 --;
            }
            while (p2 >= 0) {
                if (t.charAt(p2) == '#') {
                    sum2 ++;
                } else {
                    sum2 --;
                    if (sum2 < 0) {
                        break;
                    }
                }
                p2 --;
            }
            // 避免空指针异常,并且保证剩余字串为空串的情况。
            if (p1 >= 0 && p2 >= 0) {
                // 对应位置不等,直接返回false即可。
                if (s.charAt(p1) != t.charAt(p2)) {
                    return false;
                }
                // p1 != p2,即有一方为-1,有一方大于等于0,此时直接返回false即可。
            } else if (p1 != p2) {
                return false;
            }
            p1 --;
            p2 --;
        }
        return true;
    }
}

 

标签:p2,844,false,---,p1,deQue2,return,deQue1,退格
From: https://www.cnblogs.com/allWu/p/17204124.html

相关文章

  • DB-DML
         delete是以row为单位  关键是where ......
  • 解决vue中v-html元素中标签样式失效问题
    最近在项目中遇到移动端和pc端样式冲突的问题。加上scoped会导致v-html下绑定的标签样式不生效、第三方引用的类库对其修改也不生效,特此总结一下几点,用来解决: Vue为v-......
  • 12N65-ASEMI高压MOS管12N65
    编辑-Z12N65在TO-220封装里的静态漏极源导通电阻(RDS(ON))为0.68Ω,是一款N沟道高压MOS管。12N65的最大脉冲正向电流ISM为48A,零栅极电压漏极电流(IDSS)为10uA,其工作时耐温度......
  • locust-任务的等待机制
    locust任务等待有三种方式,分别是constant、between、constant_pacing.他们的区别是: constant(2)#任务执行完毕等待2秒开始下一任务between(1,7)#任务执行完毕等待1-......
  • java学习日记20230310-数组
    数组数组/排序/查找数组可以存放多个统一类型的数据,数组本身也是一种数据类型,引用类型;    array.length标识数组的大小/长度数组的定义数据类型[]数组名......
  • java-IO-字节流写数据加异常处理
       ......
  • 《重构-改善既有代码设计案例》案例之C#版(4)
    书接上文...这把要干个大的了,大神要把计算阶段与格式化阶段完全分离....为什么呢,因为目前这个结果是文本字符串,如果将来要新增一个需求,输出html格式的结果。那就只用新增......
  • Games101-Cp1-Transformation
    最近为了求职重新开始把图形学相关的内容重新系统的学习,先把Games101的内容入门,然后把虎书相关的内容补充。Transformation矩阵变换可以对不同坐标系之间进行转换,在这个......
  • 数据结构学习笔记-day1
    导言:数据结构是一门研究非数值计算程序设计中的操作对象,以及这些对像之间的关系和操作。 Day1一、基本概念术语数据:客观事物的符号表示,是能输入到计算机中并能程序被......
  • java-IO-字节流写输入的三种方式
        ......