给你一个字符串 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);
}
}