zoukankan      html  css  js  c++  java
  • 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 只含有小写字母以及字符 '#'。
     
    进阶:

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

    思路

    (1)如果使用栈的方法来做的话,只要依次遍历字符串,如果遇到‘#’字符的话,就弹出栈顶元素,否则压入栈。
    再比较两个栈最终的元素。
    (2)如果用(O(n))的复杂度的话 那么可以利用反序遍历的方法比较两个字符串。分别定义两个变量存放当前要删除字符的个数,即‘#’的个数。
    一边遍历一边回删,直到遇到两字符串有留下来的元素不相等的情况,结束循环 返回false。
    这种思路的关键是:‘#’字符只与其前面的字符相关,与之后的字符无关。

    class Solution {
    public:
        bool backspaceCompare(string S, string T) {
            int m = S.length()-1;
            int n = T.length()-1;
            //要删除的个数
            int dels = 0;
            int delt = 0;
            while(m >= 0 || n >= 0)
            {
                while(m>=0)
                {
                    if(S[m] == '#')
                    {
                        dels++;m--;
                    }
                    else if(dels > 0)
                    {
                        dels--;m--;
                    }
                    else break;
                }
    
                while(n>=0)
                {
                    if(T[n] == '#')
                    {
                        delt++;n--;
                    }
                    else if(delt > 0)
                    {
                        delt--;n--;
                    }
                    else break;
                }
    
                if(m>=0 && n >=0) 
                {
                    if(S[m] != T[n])  return false;
                }
                else
                {
                    if(m>=0 || n>=0) return false;
                }
                m--;n--;
            }
            return true;
        }
    };
    

    链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/backspace-string-compare

  • 相关阅读:
    sphinx安装
    如何获取原生数据
    DOM详解
    JavaScript简单入门(补充篇)
    JavaScript的简单入门
    Java正则表达式练习
    Java反射机制(Reflect)解析
    21070118记
    CSS3设置Table奇数行和偶数行样式
    获取当前地址
  • 原文地址:https://www.cnblogs.com/jiashun/p/LeetCode_844.html
Copyright © 2011-2022 走看看