代码随想录——比较含退格的字符串(Leetcode844)需要回顾

题目链接
在这里插入图片描述

快慢指针

思路快慢指针,整体想的是对的,首先把字符串转为数组,快指针遍历数组,慢指针对#字符进行处理。最后提交所有测试用例都返回false,没想到应该把fast遍历数组结束后,slow后面的直接删除在对两个字符串进行比较。

确实对Java的一些函数不熟悉,希望在联系题目的过程中多多积累😊

class Solution {
    public boolean backspaceCompare(String s, String t) {
        char[] ss = s.toCharArray();
        char[] tt = t.toCharArray();
        return getString(ss).equals(getString(tt));
    }

    String getString(char[] c){
        int slow = 0;
        for(int fast = 0; fast < c.length; fast++){
            if(c[fast] != '#'){
                c[slow++] = c[fast];
            }else{
                if(slow > 0){
                    slow--;
                }
            }
        }
        // 创建了一个新的 String 对象,然后从这个对象中提取一个子字符串
        return new String(c).substring(0,slow);
    }
}

toCharArray():把字符串整体转化成数组
equals():用于比较两个对象是否相等,如果两个对象的内容或状态相同,则返回true,否则返回false
substring():可以根据起始索引和结束索引来提取子字符串

第二种方法(学习):栈

在这里插入图片描述
栈方法很清晰,不会写栈的代码,SOS /(ㄒoㄒ)/~~

class Solution {
    public boolean backspaceCompare(String S, String T) {
        return build(S).equals(build(T));
    }

    public String build(String str) {
    	// 创建一个 StringBuffer 对象用于存储最终的字符串
        StringBuffer ret = new StringBuffer();
        int length = str.length();
        for (int i = 0; i < length; ++i) {
        	// 获取当前字符
            char ch = str.charAt(i);
             // 如果当前字符不是退格符
            if (ch != '#') {
            	// 将当前字符添加到 StringBuffer 对象中
                ret.append(ch);
            } else {
            	// 如果 StringBuffer 对象中还有字符
                if (ret.length() > 0) {
                	// 删除 StringBuffer 对象中的最后一个字符
                    ret.deleteCharAt(ret.length() - 1);
                }
            }
        }
        // 将 StringBuffer 对象转换为字符串并返回
        return ret.toString();
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/backspace-string-compare/solutions/451606/bi-jiao-han-tui-ge-de-zi-fu-chuan-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

chartAt():用于获取字符串中指定索引位置的字符
append():Java中 StringBuilder 和 StringBuffer 类的一个方法,用于向现有的字符串后面添加一个新的字符串或字符序列
deleteCharAt(): Java中 StringBuffer 和 StringBuilder 类的一个方法,用于删除字符串中指定索引位置的字符

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值