194、比较含退格的字符串

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

示例 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 只含有小写字母以及字符 ‘#’。

一开始拿到题目也是有待蒙蔽,但是思考了两分钟就直接撸出代码了

class Solution {
    public boolean backspaceCompare(String S, String T) {
        StringBuilder Ssb = new StringBuilder();
		StringBuilder Tsb = new StringBuilder();
		for (int i = 0; i < S.length(); i++) {
			if(S.charAt(i) == '#'){
				if(Ssb.length() != 0){
					Ssb.delete(Ssb.length() - 1, Ssb.length());
				}
			}else {
				Ssb.append(S.charAt(i));
			}
		}
        
		for (int i = 0; i < T.length(); i++) {
			if(T.charAt(i) == '#'){
				if(Tsb.length() != 0){
					Tsb.delete(Tsb.length() - 1, Tsb.length() );
				}
			}else {
				Tsb.append(T.charAt(i));
			}
		}
        System.out.println(Tsb.toString());
        System.out.println(Ssb.toString());
        if(new String(Tsb).equals(new String(Ssb))){
        	return true;
        }else {
			return false;
		}
        
    }
}

排名靠前的代码
感觉思路差不多啊,但是这个是从后往前,这样可以大大减少了比较的次数,因为如果后面的都不一样,那么肯定不一样,因此可以直接进行判断

class Solution {
    public boolean backspaceCompare(String S, String T) {
        if ((null == S && null != T) || (null != S && null == T)) {
            return false;
        }

        for (int i = S.length() - 1, j = T.length() - 1; ; --i, --j) {
            for (int b = 0; i >= 0 && (b > 0 || '#' == S.charAt(i)); --i) {
                b += '#' == S.charAt(i) ? 1 : -1;
            }
            for (int b = 0; j >= 0 && (b > 0 || '#' == T.charAt(j)); --j) {
                b += '#' == T.charAt(j) ? 1 : -1;
            }

            if (0 > i || 0 > j || S.charAt(i) != T.charAt(j)) {
                return -1 == i && -1 == j;
            }
        }
    }
}

自己尝试写一下,只写了一个大概,其余没写出来,回头有时间再补

Stack<Character> Stem = new Stack<>();
		Stack<Character> Ttem = new Stack<>();
		int indexS = S.length() - 1;
		int indexT = T.length() - 1;
		for (int i = S.length() - 1; i >= 0; i--) {
			if(S.charAt(i) == '#'){
				Stem.push(S.charAt(i));
			}else {
				if(!Stem.isEmpty() && Stem.peek() == '#'){
					Stem.pop();
				}else {
					Stem.push(S.charAt(i));
				}
			}
		}
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值