zoukankan      html  css  js  c++  java
  • 30-Day Leetcoding Challenge Day9

    两种解法:

    1.用stack存储,重新构建字符串,比较是否相等。

    2.双指针,有后向前遍历,此解法空间复杂度为O(1)。

    JAVA

    class Solution {
        public boolean backspaceCompare(String S, String T) {
            return helpback(S).equals(helpback(T));
        }
        public Stack<Character> helpback(String str){
            Stack<Character> stack = new Stack();
            for(int i = 0; i < str.length(); i++){
                if(str.charAt(i) == '#'){
                    if(stack.size() != 0)stack.pop();
                    continue;
                }
                stack.push(str.charAt(i));
            }
            return stack;
        }
    }
    class Solution {
        public boolean backspaceCompare(String S, String T) {
            int i = S.length()-1;
            int j = T.length()-1;
            int iskip = 0;
            int jskip = 0;
            while(i >= 0 || j >= 0){
                while(i >= 0){ //!!!找到比较的位置
                    if(S.charAt(i) == '#'){
                        iskip++;
                        i--;
                    }
                    else if(iskip > 0){
                        iskip--;
                        i--;
                    }
                    else break;
                }
                while(j >= 0){ //!!!找到比较的位置
                    if(T.charAt(j) == '#'){
                        jskip++;
                        j--;
                    }
                    else if(jskip > 0){
                        jskip--;
                        j--;
                    }
                    else break;
                }
                // If two actual characters are different
                if(i >= 0 && j >= 0 && S.charAt(i) != T.charAt(j))
                    return false;
                // If expecting to compare char vs nothing
                if((i >=0 ) != (j >= 0))
                    return false;
                i--;
                j--;
            }
            return true;
        }
    }

    Python3

    class Solution:
        def backspaceCompare(self, S: str, T: str) -> bool:     
            return self._back(S) == self._back(T)
        def _back(self, str):
            stack = []
            for i in range(len(str)):
                if str[i] == '#':
                    if stack:
                        stack.pop()
                    continue
                stack.append(str[i])
            return stack
    class Solution:
        def backspaceCompare(self, S: str, T: str) -> bool:     
            i = len(S)-1
            j = len(T)-1
            iskip = 0
            jskip = 0
            while i >= 0 or j >= 0:
                while i >= 0:
                    if S[i] == '#':
                        iskip += 1
                        i -= 1
                    elif iskip > 0:
                        iskip -= 1
                        i -= 1
                    else:
                        break
                while j >= 0:
                    if T[j] == '#':
                        jskip += 1
                        j -= 1
                    elif jskip > 0:
                        jskip -= 1
                        j -= 1
                    else:
                        break
                if i >= 0 and j >= 0 and S[i] != T[j]:
                    return False
                if (i >= 0) != (j >= 0):
                    return False
                i -= 1
                j -= 1
            return True
  • 相关阅读:
    JavaScript设计模式
    AgileConfig-如何使用AgileConfig.Client读取配置
    Java8的Optional:如何干掉空指针?
    k8s之DNS服务器搭建
    如何根据角色批量激活SAP Fiori服务
    被自己以为的GZIP秀到了
    Kubernetes官方java客户端之二:序列化和反序列化问题
    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
    Shiro运行原理?
    Shiro认证过程?
  • 原文地址:https://www.cnblogs.com/yawenw/p/12667826.html
Copyright © 2011-2022 走看看