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

文章目录

题目

方法一:单指针

  1. 首先每次进入循环处理之前需要对第一个字符进行判断,若是退格符,直接删掉,结束此次循环
  2. fast从0开始,如果fast指向的字符不为# fast往后移动
  3. 如果fast指向的字符为 # 则删除 fast前面一个字符 和fast指向的字符 然后重置fast指针到起始点继续循环,直到没有#号符为止
  4. 在判断处理完的两个字符串是否相等
java 复制代码
// 方法一 : 单指针
    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,代表处理完成
java 复制代码
// 方法二 : 双指针 本质还是单指针  指针从字符串尾部向前移动,一旦遇到#  记录退格的数量 遇到字符就根据退格数量删除字符,直到指针<0
    public 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();//返回处理好的字符串
    }

方法三:栈

相关推荐
聚客AI1 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v4 小时前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工6 小时前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农7 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了7 小时前
AcWing学习——双指针算法
c++·算法
moonlifesudo8 小时前
322:零钱兑换(三种方法)
算法
NAGNIP1 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队1 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja1 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下1 天前
最终的信号类
开发语言·c++·算法