【Leetcode】每日一题2021/09/15

【Leetcode】每日一题2021/09/15

  • 就是对对碰游戏的思想,每次做了删除还要看看新组成的字符串与之前的是否构成重复。
    为了避免每次重头再来,需要记录删除重复项的第一个位置。
class Solution {
    public String removeDuplicates(String s) {
        StringBuilder sb = new StringBuilder(s);
        for (int i = 0; i < sb.length(); ) {
            if (i > 0 && sb.charAt(i) == sb.charAt(i - 1)) {
                sb.delete(i - 1, i + 1);
                i = i - 1;
            } else {
                i++;
            }
        }
        return sb.toString();
    }
}

【Leetcode】每日一题2021/09/15
这个方法是因为sb经常都在变化,所以耗时也比较多。

  • 使用栈的方法,每次进栈的时候检查元素是否相同,相同就把之前的弹出,而且自己也不进栈。
    最后输出的元素就是栈弹出来,并逆序。
  • 知识点
    StringBuilder的实际长度用length()方法,总容量用capacity()方法。
    删除的两种方法:
    public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
    public StringBuffer delete(int start,int end):删除从指定位置开始到指定位置结束的内容,并返回本身
上一篇:Java基础15 Java常用类,Java笔试常见编程题


下一篇:每日算法-Z字形变换