【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();//返回处理好的字符串
    }

方法三:栈

相关推荐
余生皆假期-1 小时前
傅里叶变换和拉普拉斯变换
人工智能·算法·机器学习
数模竞赛Paid answer2 小时前
2026年五一杯数学建模C题边坡预警问题求解全过程文档及程序
算法·数学建模·五一杯
hold?fish:palm2 小时前
20 旋转图像
c++·算法·leetcode
NoteStream3 小时前
【C语言基础】分支和循环(上)
c语言·开发语言·c++·经验分享·笔记·算法·c#
白狐_7983 小时前
408数据结构第7章:查找②——顺序、折半、分块查找秒杀 + 真题
数据结构·算法
卷心菜的学习路3 小时前
基于多模态向量检索的数学相似题推荐系统:完整设计、算法与实验
java·python·算法·大模型·推荐算法·数学相似题
向阳而生自媒体3 小时前
2026年MBA面试自我介绍怎么说?3分钟/5分钟版本怎么准备?
面试·职场和发展
小南知更鸟3 小时前
【leetcodehot100】leetcode-hot100-20260809更新
算法·leetcode·职场和发展
数模竞赛Paid answer3 小时前
2021年深圳杯数学建模A题火星探测器着陆控制方案解题全过程论文及程序
算法·数学建模·深圳杯
hold?fish:palm3 小时前
19 螺旋矩阵
线性代数·算法·矩阵