每日一题——LeetCode844

2023-12-22 20:30:01

方法一 暴力法:

对两个字符串分别从头到尾遍历一遍,遇到#就删除#和它之前的那个字符,如果遇到#在字符串的第一位则只用删除#,最后将删除后的不含#的两个字符串进行比较是否一样

var backspaceCompare = function(s, t) {
  for(var i=0;i<s.length;i++){
        if(s[i]==='#'){
            if(i===0){
                s=s.slice(1);
                i--;
            }else{
                s=s.slice(0,i-1)+s.slice(i+1);
                i-=2 ;
            }
            
        }
    }

    for(var i=0;i<t.length;i++){
        if(t[i]==='#'){
            if(i===0){
                t=t.slice(1);
                i--;
            }else{
                t=t.slice(0,i-1)+t.slice(i+1);
                i-=2;
            }
        }
    }
    return s===t;
};

消耗时间和内存:

方法二 双指针法:

两个指针分别指向s和t的尾部,从尾部开始每一位进行比较, 碰到#时用skip++代表要跳过一位进行比较,变相相当于删除了#之前那一个字符。若对比过程出现 S, T 当前字符不匹配,则遍历结束,返回 false,若 S,T 都遍历结束,且都能一一匹配,则返回 true。

var backspaceCompare = function(S, T) {
    let i = S.length - 1,
        j = T.length - 1,
        skipS = 0,
        skipT = 0;

    while(i >= 0 || j >= 0){

        while(i >= 0){
            if(S[i] === '#'){
                skipS++;
                i--;
            }else if(skipS > 0){
                skipS--;
                i--;
            }else break;
        }

        while(j >= 0){
            if(T[j] === '#'){
                skipT++;
                j--;
            }else if(skipT > 0){
                skipT--;
                j--;
            }else break;
        }
        if(S[i] !== T[j]) return false;
        i--;
        j--;
    }
    return true;
}

消耗时间和内存:?

?

方法三 栈:

和方法一类似,从前往后遍历,遇到字符先push进数组,遇到#就把数组最后一个元素移出,最后把两个数组转为字符串比较是否相同

var backspaceCompare = function(S, T) {
   var a=[],b=[]
   for(var i=0;i<S.length;i++){
    if(S[i]==='#'){
        a.pop()
    }else{
        a.push(S[i])
    }
   }

   for(var i=0;i<T.length;i++){
    if(T[i]==='#'){
        b.pop()
    }else{
        b.push(T[i])
    }
   }

   return a.join('')===b.join('')
}

消耗时间和内存:?

总体来说,三种方法耗时差不多

文章来源:https://blog.csdn.net/weixin_52878347/article/details/135158328
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。