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

方法三:栈

相关推荐
君义_noip2 小时前
信息学奥赛一本通 1661:有趣的数列 | 洛谷 P3200 [HNOI2009] 有趣的数列
c++·算法·组合数学·信息学奥赛·csp-s
程序员:钧念2 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
英英_3 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab
一起养小猫4 小时前
LeetCode100天Day14-轮转数组与买卖股票最佳时机
算法·leetcode·职场和发展
hele_two4 小时前
快速幂算法
c++·python·算法
l1t4 小时前
利用DeepSeek将python DLX求解数独程序格式化并改成3.x版本
开发语言·python·算法·数独
jllllyuz5 小时前
基于子集模拟的系统与静态可靠性分析及Matlab优化算法实现
算法·matlab·概率论
程序员-King.5 小时前
day143—递归—对称二叉树(LeetCode-101)
数据结构·算法·leetcode·二叉树·递归
BlockChain8885 小时前
字符串最后一个单词的长度
算法·go
爱吃泡芙的小白白5 小时前
深入解析:2024年AI大模型核心算法与应用全景
人工智能·算法·大模型算法