首页 > 其他分享 >leetCode [844. Backspace String Compare]

leetCode [844. Backspace String Compare]

时间:2022-10-15 16:12:15浏览次数:75  
标签:Compare sIndex return string -- 844 Backspace false tIndex

[844. Backspace String Compare]

(https://leetcode.cn/problems/backspace-string-compare/)

image-20221015152645703

  • 此题一看就有一股浓浓的栈味儿,毕竟匹配问题可是栈的强项

  • 使用字符串string作为栈,末尾添加和弹出,最后只需比较两个字符串即可,比栈方便点

    class Solution {
    public:
        bool backspaceCompare(string S, string T) {
            string s; 
            string t; 
            
            for (int i = 0; i < S.size(); i++) {
                if (S[i] != '#') s += S[i];
                else if ( s.empty() == false ) s.pop_back();
            }
                
            for (int i = 0; i < T.size(); i++) {
                if (T[i] != '#') t += T[i];
                else if ( t.empty() == false ) t.pop_back();
    
            }
            
            if (s == t) return true; 
            
            return false;
        }
    };
    
  • 时间复杂度:O(n + m)

  • 空间复杂度:O(n + m)

双指针法

  • 很显然,栈的空间复杂度没法做到O(1),是数组且需要原地操作,很容易想到双指针法来进行删除

  • 此题,一个字符是否会被删掉,只取决于该字符后面的退格符,因此我们需要逆序进行操作

  • 具体做法:我们需要定义s,t的最大下标sIndex和tIndex,以及记录s中'#'数量的sSharpNums和记录t中'#'数量的tSharpNums

    • 两个字符串同时移动,每次移动时,我们需要看当前是否为'#'或'#'数量是否大于0 ,是就继续走,不是就进行比较,若目标值不同则return false
    • 数组越界则终止移动,随后判断两个字符串移动的索引是否都小于0,若是则return false
  • 实现:

    class Solution {
    public:
        bool backspaceCompare(string s, string t) {
            
            int sIndex = s.size() - 1, tIndex = t.size() - 1;
            int sSharpNums = 0, tSharpNums = 0;
    
            while( true )
            {
                
                //是否为'#'或'#'数量是否大于0,消耗#
                while( sIndex >= 0 )
                {
                    if( s[sIndex] == '#' ) sSharpNums++;
                    else
                    {
                        if( sSharpNums > 0 ) --sSharpNums;
                        else break;
                    }
                    --sIndex;
                }
    
                while( tIndex >= 0 )
                {
                    if( t[tIndex] == '#' ) tSharpNums++;
                    else
                    {
                        if( tSharpNums > 0 ) --tSharpNums;
                        else break;
                    }
                    --tIndex;
                }
    
                //越界终止
                if( sIndex < 0 || tIndex < 0 ) break;
    
                //目标值不同则终止
                if( s[sIndex] != t[tIndex] ) return false;
    
                --sIndex, --tIndex;
            }
    
            if( sIndex < 0 && tIndex < 0 ) return true;
    
            return false;
        }
    };
    
  • 时间复杂度:O(n + m)

    空间复杂度:O(1)

标签:Compare,sIndex,return,string,--,844,Backspace,false,tIndex
From: https://www.cnblogs.com/chenglixue/p/16794375.html

相关文章

  • CF1741A Compare T-Shirt Sizes
    题链:cflugou赛时吃了一波罚时(?代码挺长(?Description给你两个衣服尺码,比较他们的大小。Analysis细节题。首先我们将所有尺码分为\(\text{S}\)、\(\text{M}\)、\(\t......
  • Leetcode 844 -- 双指针&&O(1)时间复杂度
    题目描述比较含退格的字符串思路这里主要考虑O(1)空间复杂度的做法。一个字符是否会被删掉,只取决于该字符后面的退格符,而与该字符前面的退格符无关。因此当我们逆......
  • 比较有意思的比较内表的小函数:CTVB_COMPARE_TABLES
    有时候自己开发tablecontrol的表维护,涉及到数据的增删改查,可以考虑用下函数 CTVB_COMPARE_TABLES包   :CT函数组:CTVB  函数模块:CTVB_COMPARE_TABLES C......
  • String忽略大小写方法compareToIgnoreCase源码及Comparator自定义比较器
    String忽略大小写方法compareToIgnoreCase源码及Comparator自定义比较器//源码publicintcompareToIgnoreCase(Stringstr){returnCASE_INSENSITIVE_O......
  • BeyondCompare常用功能图解
                ​​http://jingyan.baidu.com/article/066074d68f847ec3c31cb05a.html​​​​http://lovesoo.org/use-file-comparison-tools-beyond-compare.ht......
  • Linux平台编译带PCL和PDAL插件的CloudCompare
    最近的综合课程设计需要用到CloudCompare这款软件处理点云数据,最开始我发现Debian的apt软件库就包含它,安装后却发现打不开.pcd格式的数据,于是需要从源码编译附带PCL插件的C......
  • 比较运算符compareTo()、equals()、==之间的区别与应用总结
    在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,ja......
  • P1844 阅览室
    此题现有题解较为冗长,因此前来贡献一发最短解。首先正常的思路是直接按题意模拟。即:枚举当前时刻\(T\)对于每个人,标记该时刻想要拿到的书根据题目的要求判断冲突情况......
  • Java用CompareTo方法实现根据两个或多个属性对对象进行排序
    CompareTo方法CompareTo是String类的方法,CompareTo(Objecto1,Objecto2),就是用o1和o2进行比较o1.compateTo(o2)大于0则o1大o1.compateTo(o2)小于0则o2大o1.compat......
  • 理解Compare()函数的返回值
    返回1(正数):  第一个元素排在第二个元素后面;返回-1(负数): 第一个元素排在第二个元素前面返回0:两者相等,不进行交换,也就不排序。但是要根据题目来判断返回什么。如......