力扣题844比较含退格的字符串
发布日期:2022-03-04 11:48:22
浏览次数:3
分类:技术文章
本文共 2807 字,大约阅读时间需要 9 分钟。
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。
如果相等,返回 true ;否则,返回 false 。
注意:如果对空文本输入退格字符,文本继续为空。
示例 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.把两个字符串都改为去除"#"及被退掉的字符的新字符串,然后比较新字符串是否相等即可。
class Solution { public boolean backspaceCompare(String s, String t) { return build(s).equals(build(t)); } public String build(String str) { StringBuilder s = new StringBuilder(); for (int i = 0;i < str.length();i++) { if (str.charAt(i) != '#') {//遇到的不是#,直接加入 s.append(str.charAt(i)); } else { if (s.length() > 0) { s.deleteCharAt(s.length() - 1);//如果遇到了#号,并且还存在字符的情况下,删掉最后一个字符 } } } return s.toString(); }}
2.从前往后遍历比较的话,因为不知道当前字符的后面存在几个#,因此无法判断当前字符是否是有效字符,因此从后往前进行遍历,统计#出现的次数,跳过对应数量的字符。
class Solution { public boolean backspaceCompare(String s, String t) { int index1 = s.length() - 1; int index2 = t.length() - 1; int skipS = 0;//s中连续遇到#的次数,即需要连续跳过多少次字符 int skipT = 0;//t中连续遇到#的次数,即需要连续跳过多少次字符 while (index1 >= 0 || index2 >= 0) { //找到s中第一个需要比较的字符 while (index1 >= 0) { if (s.charAt(index1) == '#') {//统计需要退的格数 skipS++; index1--; } else if (skipS > 0) {//将该退的字符退掉 skipS--; index1--; } else { break; } } //找到t中第一个需要比较的字符 while (index2 >= 0) { if (t.charAt(index2) == '#') { skipT++; index2--; } else if (skipT > 0) { skipT--; index2--; } else { break; } } //因为如果第一位是#,可能出现index1、index2为-1,所以要先判断两个有效位是不是都大于等于0,没有越界 if (index1 >= 0 && index2 >= 0) { if (s.charAt(index1) != t.charAt(index2)) {//当前比较的字符不相等,直接返回false return false; } } // 其余可能为 false 情况为 // 1. i < 0 && j >= 0 // 2. j < 0 && i >= 0 // 3. i < 0 && j < 0 // 其中,第 3 种情况为符合题意情况,因为这种情况下 s 和 t 都是 index = 0 的位置为 '#' 而这种情况下 // 退格空字符即为空字符,也符合题意,应当返回 True。 // 但是,情况 1 和 2 不符合题意,因为 s 和 t 其中一个是在 index >= 0 处找到了待比较字符,另一个没有找到 // 这种情况显然不符合题意,应当返回 False,下式便处理这种情况。 else if (index1 >=0 || index2 >= 0){ return false; } index1--; index2--; } return true; }}
题源:
转载地址:https://blog.csdn.net/xxyneymar/article/details/122427567 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月06日 21时40分57秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
人人都懂的编程课(Python)
2019-04-28
reactos操作系统实现(100)
2019-04-28
reactos操作系统实现(101)
2019-04-28
Android培训班(75)Dalvik虚拟机的GetStaticMethodID函数
2019-04-28
新手也可以学会TensorFlow
2019-04-28
游戏制作之路(32)创建自定义的界面样式管理
2019-04-28
从小说里学会长大
2019-04-28
iBATIS&Spring合奏(一)--DAO
2019-04-28
iBATIS&Spring合奏(二)--Flex前端融合
2019-04-28
iBATIS&Spring合奏(三)--事务&动态SQL
2019-04-28
iBATIS&Spring合奏(四)--设计模式in iBATIS
2019-04-28
iBATIS&Spring合奏(五)--整合lucene搜索表字段内容
2019-04-28
寒假的唠叨
2019-04-28
Flex&iBatis&Hibernate&Spring—师徒奶茶系统V1总结
2019-04-28
Java 并发包之线程池和原子计数
2019-04-28
JVM StackMapTable 属性的作用及理解
2019-04-28
ASM(三) 利用Method组件动态生成方法的字节码
2019-04-28
ASM(四) 利用Method 组件动态注入方法逻辑
2019-04-28
深度学习与神经网络关系
2019-04-28
反向传播back propagation:神经网络递推与一般表示的向量形式
2019-04-28