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

方法三:栈

相关推荐
圣保罗的大教堂5 小时前
leetcode 3418. 机器人可以获得的最大金币数 中等
leetcode
workflower6 小时前
用硬件换时间”与“用算法降成本”之间的博弈
人工智能·算法·安全·集成测试·无人机·ai编程
重生之我是Java开发战士8 小时前
【动态规划】简单多状态dp问题:按摩师,打家劫舍,删除并获得点数,粉刷房子,买卖股票的最佳时机
算法·动态规划·哈希算法
KAU的云实验台9 小时前
单/多UAV、静/动态路径规划,基于PlatEMO平台的带约束多目标优化 本文核心内容:
算法·matlab·无人机
Liangwei Lin9 小时前
洛谷 P1807 最长路
数据结构·算法
会编程的土豆9 小时前
【数据结构与算法】二叉树从建立开始
数据结构·c++·算法
_日拱一卒9 小时前
LeetCode:最大子数组和
数据结构·算法·leetcode
计算机安禾10 小时前
【数据结构与算法】第22篇:线索二叉树(Threaded Binary Tree)
c语言·开发语言·数据结构·学习·算法·链表·visual studio code
算法鑫探10 小时前
解密2025数字密码:数位统计之谜
c语言·数据结构·算法·新人首发