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

    package leecode;

    import java.util.Arrays;
    import java.util.Stack;

    /**
    * @Author:Tang
    * @CreateDate 2021/3/9
    *
    * 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
    *
    * 在 S 上反复执行重复项删除操作,直到无法继续删除。
    *
    * 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
    *
    * 1 <= S.length <= 20000
    * S 仅由小写英文字母组成
    */
    public class removeDuplicates {

    /**
    * 方法一
    * 乍看一眼感觉得用递归 (做麻烦了)
    *
    * for循环 找到当前串中的一对重复数据为止
    * 删除这一对 然后向下传递
    * 直到再也没有重复的了
    */
    public String execute(String S){
    if(S == null || S.isEmpty()){
    return "";
    }
    if(S.length() == 1){
    return S;
    }

    int index = 0;

    for (int i = index; i < S.length()-1; i++) {
    if(S.charAt(i) == S.charAt(i+1)){
    StringBuffer stringBuffer = new StringBuffer();
    char[] array = S.toCharArray();
    array[i] = 0;
    array[i+1] = 0;
    for (char c: array) {
    if(c != 0){
    stringBuffer.append(c);
    }
    }
    return execute(stringBuffer.toString());
    }

    }
    return S;

    }

    /**
    * 方法二
    * 两个重复项碰撞然后删除 很容易让人想到用栈
    * @param S
    * @return
    */
    public String removeDuplicates(String S){
    if(S.isEmpty()){
    return S;
    }

    char[] charArr = S.toCharArray();
    Stack<Character> stack = new Stack();

    for (char c: charArr) {
    if(!stack.isEmpty() && stack.peek() == c){
    stack.pop();
    }else {
    stack.push(c);
    }
    }

    StringBuffer stringBuffer = new StringBuffer();
    for(int i = 0; i < stack.size(); i++){
    stringBuffer.append(stack.get(i));
    }
    return stringBuffer.toString();
    }

    public static void main(String[] args) {
    String result = new removeDuplicates().removeDuplicates("cabbc");
    System.out.println(result);
    }

    }
  • 相关阅读:
    IE7局部滚动区域下绝对定位或相对定位元素不随滚动条滚动的bug
    Webstorm编译TypeScript报错
    Javascript动态创建 style 节点
    css多栏自适应布局
    禁用右键
    Mac下启动和停止Mysql服务
    codemirror
    JavaScript 中的事件流和事件处理程序(读书笔记思维导图)
    mac压缩文件乱码
    Mybatis框架五:动态SQL
  • 原文地址:https://www.cnblogs.com/ttaall/p/14507800.html
Copyright © 2011-2022 走看看