【双指针】844. 比较含退格的字符串

844. 比较含退格的字符串

解题思路

在这里插入图片描述

思路:函数deLETE的作用是处理带有退格符号的字符串。它使用双指针法来模拟字符串处理。初始时,慢指针slow和快指针fast都指向字符串的开头。然后,通过遍历字符串,如果当前字符不是退格符号(#),则将该字符复制到慢指针所在的位置,并且慢指针slow向后移动一位。如果当前字符是退格符号,并且慢指针slow的位置大于0(即不是字符串的开头),则将慢指针向前移动一位,相当于删除前一个字符。最后,返回处理后的字符串,使用substr函数从开头截取到慢指针slow处的子字符串。

class Solution {
    
    
    public String delete(String s){
    
    
        // 使用快慢指针来删除元素 
        // 首先快慢指针同时指向字符串的末尾位置
        // 然后一起像前面移动  遇到非目标元素 都一起向前移动
        // 遇到目标元素之后 慢指针停下来 然后 快指针移动位置

        // 设置快慢指针 目标删除 # 元素还有前面一个元素
        int slow = 0;
        int fast = 0;
        char[] arr = s.toCharArray();// 转换为字符数组

        for(fast = 0; fast < s.length(); fast++){
    
    
            if(arr[fast] != '#'){
    
    
                // 快指针指向的元素 直接覆盖慢指针指向的元素 # 
                arr[slow] = arr[fast];
                // 然后slow ++
                slow++;
            }else if(slow > 0){
    
    
                slow--;// 这句话的目的在于   我们需要删除 # 前面一个字符
            }
        }

        return new String(arr,0,slow);// 返回新的字符串
    }
    public boolean backspaceCompare(String s, String t) {
    
    
        // 将两个字符串转换为 字符数组
        return delete(s).equals(delete(t));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44653420/article/details/131627893