• 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}
    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    ASP.NET中的参数与特殊类型和特性
    ASP.NET MVC概述及第一个MVC程序
    ASP.NET系统对象
    WCF学习——WCF简介(三)
    WCF学习——构建一个简单的WCF应用(二)
    WCF学习——构建一个简单的WCF应用(一)
    注入技术--修改pe文件导入表进行注入
    内存
    I/O
    进程
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/14500531.html
Copyright © 2020-2023  润新知