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);
    }
}
发布了17 篇原创文章 · 获赞 2 · 访问量 970
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览