【LeetCode-简单题】844. 比较含退格的字符串

文章目录

    • 题目
    • 方法一:单指针
    • 方法二:双指针
    • 方法三:栈

题目

在这里插入图片描述

方法一:单指针

  1. 首先每次进入循环处理之前需要对第一个字符进行判断,若是退格符,直接删掉,结束此次循环
  2. fast从0开始,如果fast指向的字符不为# fast往后移动
  3. 如果fast指向的字符为 # 则删除 fast前面一个字符 和fast指向的字符 然后重置fast指针到起始点继续循环,直到没有#号符为止
  4. 在判断处理完的两个字符串是否相等
// 方法一 : 单指针public boolean backspaceCompare(String s, String t) {return letter(s).equals(letter(t));}public String letter(String s){StringBuffer str = new StringBuffer(s);int fast = 0;while(fast< str.length()){if(str.charAt(0) == '#') { // 若字符首个字符为 ‘#’直接删除 结束本次循环str = str.delete(0,1);continue;}  if(str.charAt(fast) != '#') fast++;//如果fast指向的字符不为#  fast往后移动else{//如果fast指向的字符为  #  则删除 fast前面一个字符  和fast字符   然后重置fast指针到起始点str = str.delete(fast-1,fast+1);//注意  这里删除区间元素 是 左闭右开的 要删除 left ,right 区间的元素  delete(left,right+1)fast = 0;//重置fast}}return str.toString();//返回处理好的字符串}

方法二:双指针

  1. 定义一个尾部指针,和#号计数器
  2. 如果尾部指针遇到# ,删除#号同时 让#号计数器+1
  3. 如果遇到字符,根据#计数器的数量来删除字符,每遇到一个字符,如果#号计数器大于0,则直接删除字符。
  4. 若遇到字符时,#号计数器=0,说明之前没有退格符,则尾部指针直接往前移动
  5. 直到尾部指针<0,代表处理完成
// 方法二 : 双指针 本质还是单指针  指针从字符串尾部向前移动,一旦遇到#  记录退格的数量 遇到字符就根据退格数量删除字符,直到指针<0public boolean backspaceCompare(String s, String t) {return letter(s).equals(letter(t));}public String letter(String s){StringBuffer str = new StringBuffer(s);int end = str.length()-1;//将指针指向末尾int temp = 0;//记录#号的数量while(end >= 0){if(str.charAt(end)=='#') {//遇到#号  temp+1,同时删除#号temp++;str.delete(end,end+1);}else{//遇到非#号  判断#数量来删除尾部字符if(temp > 0){str.delete(end,end+1);temp--;//更新#号数量}}end--;//尾部指针向前移动}return str.toString();//返回处理好的字符串}

方法三:栈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108167.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON注解和异常处理的使用

一、JSON数据返回 1.1.前言 JSON是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;同时也易于机器解析和生成。JSON的常用场景包括&#xff1a; 前后端分离的项目中&#xff0c;后端向前端传送数据时 。 Ajax异步访问数据。RPC远程调用。 除了JSON&#x…

Open Feign

Open Feign 在前面的学习中&#xff0c;我们使用了Ribbon的负载均衡功能&#xff0c;简化了远程调用时的代码&#xff1a; String user this.restTemplate.getForObject("http://spring-provider/provider/" id, String.class);如果就学到这里&#xff0c;可能以…

【多线程】常见的锁策略

常见的锁策略 1. 乐观锁 vs 悲观锁2. 读写锁 vs 普通互斥锁3. 重量级锁 vs 轻量级锁4. 自旋锁&#xff08;Spin Lock&#xff09;vs 挂起等待锁5. 公平锁 vs 非公平锁6. 可重入锁 vs 不可重入锁7. Synchronized8. 相关面试题 1. 乐观锁 vs 悲观锁 悲观锁&#xff1a; 总是假设…

obsstudio下载使用

官网 Open Broadcaster Software | OBS 介绍 OBS是Open Broadcaster Software的简称&#xff0c;是一款开源&#xff0c;用于视频录制以及直播串流的软件&#xff0c;它支持Windows、Mac以及Linux操作系统。OBS使用容易、操作简单&#xff0c;对于新手小白来说非常友好。如果…

Python的pandas库来实现将Excel文件转换为JSON格式的操作

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

STM32纯中断方式发送接收数据(串行通信;keil arm5;)

除了main文件其他文件均无修改&#xff0c;正常运行--在keil arm5内

[.NET 6] IHostedService 的呼叫等等我的爱——等待Web应用准备就绪

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不是技术而是人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 在这篇文章中,我将介绍如何等…

使用maven idea环境

目录 idea三种方式执行maven命令 工程导入 生命周期lifecycle 插件和目标 常用命令 创建模块工程后 idea三种方式执行maven命令 想在哪个工程模块上执行就点开哪一个 如果觉得双击完clean再双击install麻烦&#xff0c;可以 如果有需要还可以给命令后面加参数 ​​​ 第三种…

第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

使用Java登录校验

会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话可以包含多次请求和响应。 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请求是…

iptables 目标地址转换

目录 一、实验准备 二、配置web服务器 三、配置web防火墙网卡 四、配置客户机网卡 五、测试 1、开启防火墙功能&#xff0c;设置源地址转换&#xff0c;通过改变我客户机的地址身份为web服务器同网段来实现访问 2、通过改变目标地址&#xff08;客户机&#xff09;的地址…

算法通关村18关 | 透析回溯的模板

回溯有清晰的解题模板&#xff0c; void backtracking(参数){if (终止条件){存放结果;return;}for (选择本层中的集合元素&#xff08;画成树&#xff0c;就是树节点孩子的大小) {处理节点;backtracking();回溯&#xff0c;撤销处理结果;}} 1. 从N叉树说起 在回溯之前&#x…