Java经典算法:退格字符串比较

给定两个字符串S和T,如果在空文本编辑器中键入两个字符串,则返回它们是否相等。#表示退格字符。
范例1:
输入:S =“ ab#c”,T =“ ad#c”
输出:真
说明:S和T都变为“ ac”。
范例2:
输入:S =“ a ## c”,T =“#a#c”
输出:真
说明:S和T都变为“ c”。
Java解决方案
此问题需要O(N)时间和O(1)空间。
public boolean backspaceCompare(String S, String T) {
int i = S.length()-1;
int j = T.length()-1;

while(i>=0 || j>=0){
    int c1=0;
    while(i>=0 && (c1>0 || S.charAt(i)=='#')){
        if(S.charAt(i)=='#'){
            c1++;
        }else{
            c1--;
        }

        i--;
    }

    int c2=0;
    while(j>=0 && (c2>0 || T.charAt(j)=='#')){
        if(T.charAt(j)=='#'){
            c2++;
        }else{
            c2--;
        }

        j--;
    }

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

return i<0 && j<0;}

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值