844. 比较含退格的字符串『简单』

题目来源于力扣(LeetCode

一、题目

844. 比较含退格的字符串

题目相关标签:栈、双指针

提示:

  • 1 <= S.length <= 200
  • 1 <= T.length <= 200
  • ST 只含有小写字母以及字符 '#'

二、解题思路

  1. 两个字符串进行去 # 号的操作

  2. 遍历两个字符串,遇到 # 号且栈中不为空时,弹出栈顶元素,即表示退格的操作

  3. 为字母字符时,将字母字符压入栈中

  4. 最后判断两个字符串是否元素相同

三、代码实现

public static boolean backspaceCompare(String S, String T) {
    // 空值判断及字符串长度为 0 的判断
    if (null == S || S.isEmpty() || null == T || T.isEmpty()) {
        return false;
    }

    char[] sarr = S.toCharArray();
    char[] tarr = T.toCharArray();
	// 判断去除 # 后号的字符串是否相等
    return elementToStack(sarr).equals(elementToStack(tarr));
}

public static String elementToStack(char[] arr) {
    Stack<Character> stack = new Stack<>();

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == '#') {
            if (!stack.empty()) {
                stack.pop();
            }
        } else {
            stack.push(arr[i]);
        }
    }
    return new String().valueOf(stack);
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    String S = "ab#c", T = "ad#c";  // output: true
//    String S = "ab##", T = "c#d#";  // output: true
//    String S = "a##c", T = "#a#c";  // output: true
//    String S = "a#c", T = "b";  // output: false

    boolean result = backspaceCompare(S, T);
    System.out.println(result);
}
posted @ 2020-07-02 21:50  知音12138  阅读(197)  评论(0编辑  收藏  举报