• 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
  • 相关阅读:
    分析 ajax 请求并抓取 “今日头条的街拍图”
    requests + 正则表达式 获取 ‘猫眼电影top100’。
    爬虫基础(暂缓更新)
    Git 操作笔记:分布式版本控制系统
    python补充
    python基础
    8.最佳电影聚类分析
    文本分析 笔记
    7.文档聚类
    5.词项相似度分析
  • 原文地址:https://www.cnblogs.com/yawenw/p/12667826.html
Copyright © 2020-2023  润新知