Leetcode.844. 比较含退格的字符串

844. 比较含退格的字符串

给定 ST 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:S = "ab#c", T = "ad#c"
输出:true
解释:S 和 T 都会变成 “ac”。

示例 2:

输入:S = "ab##", T = "c#d#"
输出:true
解释:S 和 T 都会变成 “”。

示例 3:

输入:S = "a##c", T = "#a#c"
输出:true
解释:S 和 T 都会变成 “c”。

示例 4:

输入:S = "a#c", T = "b"
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。

提示:

  • 1 <= S.length <= 200
  • 1 <= T.length <= 200
  • S 和 T 只含有小写字母以及字符 ‘#’。

进阶:

你可以用 O(N) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?

方法一:重构字符串

bool backspaceCompare(char* S, char* T) {
    
    
    return strcmp(build(S), build(T)) == 0;
}

char* build(char* str) {
    
    
    int n = strlen(str), len = 0;
    char* ret = malloc(sizeof(char) * (n + 1));
    for (int i = 0; i < n; i++) {
    
    
        if (str[i] != '#') {
    
    
            ret[len++] = str[i];
        } else if (len > 0) {
    
    
            len--;
        }
    }
    ret[len] = '\0';
    return ret;
}

方法二:双指针

一个字符是否被删除,只根这个字符后面是否有#有关,所以,我们可以从后向前遍历。这样可以立即判断该字符是否被删除。

bool backspaceCompare(char* S, char* T) {
    
    
    int i = strlen(S) - 1, j = strlen(T) - 1;
    int 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 (i >= 0 && j >= 0) {
    
    
            if (S[i] != T[j]) {
    
    
                return false;
            }
        } else {
    
    
            if (i >= 0 || j >= 0) {
    
    
                return false;
            }
        }
        i--, j--;
    }
    return true;
}

Leetcode官方

猜你喜欢

转载自blog.csdn.net/e891377/article/details/109154391