1047. 删除字符串中的所有相邻重复项

2022/2/19 23:43:04

本文主要是介绍1047. 删除字符串中的所有相邻重复项,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

import java.util.Stack;

class Solution {
    public String removeDuplicates(String s) {

        Stack<Character> stack = new Stack();

        for (int i = 0; i < s.length(); i++) {

            char c = s.charAt(i);

            /**
             * 如果栈为空或者栈顶元素不相同,就可以压入
             */
            if (stack.isEmpty() || stack.peek() != c){
                stack.push(c);
            }
            else {
                stack.pop();
            }
        }

        /**
         * 栈里的元素会逆序弹出,因此需要反转字符串
         */
        String str = "";

        while (!stack.isEmpty()){
            str = stack.pop() + str;
        }

        return str;
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

双指针法

class Solution {
    public String removeDuplicates(String s) {

        char[] arr = s.toCharArray();

        /**
         * 双指针法
         * 总是让右指针元素覆盖左指针,每遇到重复元素,左指针就左移一位,让后面的右指针覆盖这个位置,这样每个重复的元素都会被覆盖
         * 如果不相同就一起移动
         */
        int left = 0;
        int right = 0;

        while (right < arr.length){

            arr[left] = arr[right];

            if (left >= 1 && arr[left] == arr[left - 1]){
                left--;
            }
            else {
                left++;
            }

            right++;
        }

        /**
         * 将部分数组转换为字符串
         */
        return new String(arr, 0, left);
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/



这篇关于1047. 删除字符串中的所有相邻重复项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程