每日一题——LeetCode844

每日一题——LeetCode844_第1张图片

方法一 暴力法:

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

var backspaceCompare = function(s, t) {
  for(var i=0;i

消耗时间和内存:

每日一题——LeetCode844_第2张图片

方法二 双指针法:

两个指针分别指向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;
}

消耗时间和内存: 

每日一题——LeetCode844_第3张图片

 

方法三 栈:

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

var backspaceCompare = function(S, T) {
   var a=[],b=[]
   for(var i=0;i

消耗时间和内存: 

每日一题——LeetCode844_第4张图片

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

你可能感兴趣的:(每日一题,leetcode,算法,javascript)