LeetCode 844. Backspace String Compare 坑

Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character.

Note that after backspacing an empty text, the text will continue empty.

Example 1:

Input: S = "ab#c", T = "ad#c"
Output: true
Explanation: Both S and T become "ac".

Example 2:

Input: S = "ab##", T = "c#d#"
Output: true
Explanation: Both S and T become "".

Example 3:

Input: S = "a##c", T = "#a#c"
Output: true
Explanation: Both S and T become "c".

Example 4:

Input: S = "a#c", T = "b"
Output: false
Explanation: S becomes "c" while T becomes "b".

Note:

  • 1 <= S.length <= 200
  • 1 <= T.length <= 200
  • S and T only contain lowercase letters and '#' characters.

Follow up:

  • Can you solve it in O(N) time and O(1) space?

----------------------

Several points should be ready for O(n) and O(1) solution:

1. Find next un-skipped character reversely.

2. Use skip variable to record the skipping num. If else in 3 branches

3. Take care one string terminates but the other one not:

class Solution:
    def backspaceCompare(self, S: str, T: str) -> bool:
        def get_pre_pos(s,i):
            skip = 0
            while (i>=0):
                if (s[i] == '#'):
                    skip,i = skip+1,i-1
                elif (skip > 0):
                    skip,i = skip-1,i-1
                else:
                    return i
            return i

        i,j = len(S)-1,len(T)-1
        while (True):
            i,j = get_pre_pos(S,i),get_pre_pos(T,j)
            #print("i={0} j={1}".format(i,j))
            if (i>=0 and j>=0 and S[i] == T[j]):
                i,j=i-1,j-1
            elif (i<0 and j<0):
                return True
            else:
                return False

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值