栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode刷题 844. 比较含退格的字符串,Easy (Java)栈+双指针

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode刷题 844. 比较含退格的字符串,Easy (Java)栈+双指针

844. 比较含退格的字符串

1.题目描述2.解法

2.1 栈

2.1.1 思路2.1.2 Java代码 2.2 双指针

2.2.1 思路2.2.2 Java代码

1.题目描述

给定 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 <= 200s 和 t 只含有小写字母以及字符 ‘#’

进阶:

你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?

来源:力扣(LeetCode)
链接:844. 比较含退格的字符串
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.解法 2.1 栈 2.1.1 思路

这道题题意其实和当时用栈将计算的值从中缀表达式变成后缀表达式是一个概念。

直接用双栈,遍历字符串,如果碰到 # 这个字符就pop(),如果为字符则push()进栈。遍历两个栈,比较栈内的字符是否都相同

tips:注意一下string和char的转化。

2.1.2 Java代码
class Solution {
    public boolean backspaceCompare(String s, String t) {
        Stack ss = backspace(s);
        Stack st = backspace(t);
        while(!ss.empty()&&!st.empty()){
            if(ss.pop() != st.pop()){
                return false;
            }
        } 
        return ss.empty()&&st.empty();
    }

    public Stack backspace(String s){
        Stack temp = new Stack();
        for (Character c : s.toCharArray()) {
            if (c != '#') {
                temp.push(c);
            }
            else if (!temp.empty()) {
                temp.pop();
            }
        }
        return temp;
    }
}
2.2 双指针 2.2.1 思路

双指针要难理解很多,其实只需要理解指针是怎么走的就可以理解了。

1.首先需要分别指向S和T末尾的两个指针(因为 # 会对它前面的字符起作用,所以从后向前)
2.之后使用两个值分别记录两串未使用的 # 的个数,比如sNumber,tNumber

指针从后向前移动

当指针指向 # 时,number++当指针指向字符,但number大于0时,就将number–而指针指向字符且number为0时,就需要比较此时两个指针所指的字符是否相同,若不同直接false;若相同,继续判断前一个字符,都向前移动一位。

3.当两个指针都顺利走完了两串字符,就可以返回true。

2.2.2 Java代码
class Solution {
    public boolean backspaceCompare(String s, String t) {
        int sPointer = s.length()-1,tPointer = t.length()-1;
        int sNumber  = 0,tNumber = 0;
        while(sPointer>=0||tPointer>=0){
            while(sPointer>=0){
                if(s.charAt(sPointer) == '#'){
                    sNumber++;
                    sPointer--;
                }
                else if(sNumber>0){
                    sNumber--;
                    sPointer--;
                }
                else{
                    break;
                }
            }
            while(tPointer>=0){
                if(t.charAt(tPointer)=='#'){
                    tNumber++;
                    tPointer--;
                }
                else if(tNumber>0){
                    tNumber--;
                    tPointer--;
                }
                else{
                    break;
                }
            }
            if(tPointer>=0&&sPointer>=0){
                if(t.charAt(tPointer) != s.charAt(sPointer)){
                    return false;
                }
            }
            else {
                if (tPointer>=0||sPointer>=0) {
                    return false;
                }
            }
            sPointer--;
            tPointer--;
        }
         return true;
     }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776838.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号