leetcode 1209. 删除字符串中的所有相邻重复项 II

给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。

你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。

在执行完所有删除操作后,返回最终得到的字符串。

本题答案保证唯一。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

    /**
     * @param String $s
     * @param Integer $k
     * @return String
     */
    function removeDuplicates($S, $k) {
        $len = strlen($S);
        if($len < $k) return $S;
        $k--;
        $str_arr = [];
        //记录连续得个数和连续得字符;
        $c = '';
        $c_num = 0;
        $c_c_num_arr = array();
        for($i = 0 ; $i < $len ;$i++){
            
            if($c_num >=$k && $c == $S[$i] ){
                //弹出连续字符    
                for($j = 0; $j<$c_num;$j++){
                    $pop = array_pop($str_arr);
                }
                // $str_arr = array_slice($str_arr,0,count($str_arr)-$c_num);
                if($c_c_num_arr){
                    $pop = array_pop($c_c_num_arr);
                    $c = $pop['v'];
                    $c_num = $pop['num']; 
                }else{
                   $c = '';
                   $c_num = 0; 
                }
                        
            }else{
                //字符入栈
                array_push($str_arr,$S[$i]); 
                if($c == $S[$i]){
                    $c_num++;
                }else{
                    $c_c_num_arr[] = ["v"=>$c,"num"=>$c_num];
                    $c = $S[$i];
                    $c_num = 1; 
                }
                
            }


           
             
        }
        return implode("", $str_arr);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值