zoukankan      html  css  js  c++  java
  • Lc1047_删除字符串中的所有相邻重复项

     1import java.util.Stack;
    2
    3/**
    4 * 1047. 删除字符串中的所有相邻重复项
    5 * 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
    6 * <p>
    7 * 在 S 上反复执行重复项删除操作,直到无法继续删除。
    8 * <p>
    9 * 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
    10 * <p>
    11 * <p>
    12 * <p>
    13 * 示例:
    14 * <p>
    15 * 输入:"abbaca"
    16 * 输出:"ca"
    17 * 解释:
    18 * 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
    19 * <p>
    20 * <p>
    21 * 提示:
    22 * <p>
    23 * 1 <= S.length <= 20000
    24 * S 仅由小写英文字母组成。
    25 */

    26public class RemoveDuplicates {
    27    /**
    28     * 通过 栈对每一个元素匹配,
    29     * <p>
    30     * 简单来说 字符串与当前栈内字符进行匹配,如果相同就出栈当前元素,并且跳过当前元素,如果不匹配就入栈
    31     *
    32     * @param S
    33     * @return
    34     */

    35    public static String removeDuplicates(String S) {
    36        Stack<Character> stack = new Stack<>();
    37        for (int i = 0; i < S.length(); i++) {
    38            if (!stack.isEmpty() && stack.peek() == S.charAt(i)) {
    39                stack.pop();
    40                continue;
    41            } else {
    42                stack.push(S.charAt(i));
    43            }
    44        }
    45
    46        StringBuilder str = new StringBuilder();
    47        for (Character c : stack) {
    48            str.append(c);
    49        }
    50
    51        return str.toString();
    52    }
    53
    54    public static void main(String[] args) {
    55        String s = "abbaca";
    56        System.out.println(removeDuplicates(s));
    57    }
    58}
    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    微信小程序前端开发中经常用到的一些好方法(待后续继续补充)
    js 滚动到指定位置的函数
    前端常用的插件网站
    电动车选购和防盗指南
    如何快速有效的投诉上海移动
    DSP中CMD文件
    碰到磁盘动态无效怎么办?
    创维37K05HR黑屏有声音故障维修
    Ubuntu桌面版本和服务器版本之间的区别(转载)
    能率热水器存在严重质量隐患!千万不要购买!买了之后每年都需要自费维修!
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/14500531.html
Copyright © 2011-2022 走看看