leecode844比较含有退格的字符串

leecode844比较含有退格的字符串

代码分析

暴力解法

class Solution {
    public boolean backspaceCompare(String s, String t) {
        //暴力解法
        int s_length=s.length();
        int t_length=t.length();
        char[] ch1 = new char[s_length];
        char[] ch2 = new char[t_length];
        int fast=0,low=0;
        for(fast=0;fast<s_length;fast++){
            if(s.charAt(fast)!='#'){
                ch1[low] = s.charAt(fast);
                low++;
            }else {
                low--;
                ch1[low]='\u0000';
            }
        }
        low=0;
        //没有考虑第一个是回车符号,这样的话我们数组的范围可能是错误的
        for(fast=0;fast<t_length;fast++){
            if(t.charAt(fast)!='#'){
                ch2[low] = t.charAt(fast);
                low++;
            }else {
                low--;
                ch1[low]='\u0000';
            }
        }
        //然后比较这两个字符数组就可以了
        //我们可以直接比较这两个字符数组
        //int max = s_length>t_length?s_length:t_length;
        fast= 0;
        low=0;
        while(ch1[fast]!='\u0000'&&ch2[low]!='\u0000'){
            if(ch1[fast]!=ch2[low]){
                return false;
            }
            fast++;
            low++;
        }
        if(ch1[fast]=='\u0000'&&ch2[low]=='\u0000'){
            return false;
        }
        return true;
        /*s=new String(ch1);
        t= new String(ch2);
        if(s.equals(t)){
            return true;
        } else return false;*/
    }

建立stringBuilder快速模拟栈的操作

        StringBuilder ssb = new StringBuilder(); // 模拟栈
        StringBuilder tsb = new StringBuilder(); // 模拟栈
        // 分别处理两个 String
        for (char c : s.toCharArray()) {
            if (c != '#') {
                ssb.append(c); // 模拟入栈
            } else if (ssb.length() > 0){ // 栈非空才能弹栈
                ssb.deleteCharAt(ssb.length() - 1); // 模拟弹栈
            }
        }
        for (char c : t.toCharArray()) {
            if (c != '#') {
                tsb.append(c); // 模拟入栈
            } else if (tsb.length() > 0){ // 栈非空才能弹栈
                tsb.deleteCharAt(tsb.length() - 1); // 模拟弹栈
            }
        }
        return ssb.toString().equals(tsb.toString());
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值