LeetCode-栈

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

    public String removeDuplicates(String S) {
        if(S == null || S.length() == 0){
            return "";
        }
        /**
         * 利用栈就可以完成,如果两个字母一样就弹出栈
         * 时间复杂度O(N) 空间复杂度O(N)
         */
        Stack<Character> stack = new Stack<>();
        char strArr[] = S.toCharArray();
        for (int i = 0; i < strArr.length; i++){
            if (stack.isEmpty() || strArr[i]!=stack.peek()){
                stack.push(strArr[i]);
            }
            else{
                stack.pop();
            }
        }
        StringBuffer stringBuffer = new StringBuffer();
        for (Character character : stack){
                stringBuffer.append(character);
        }
        return stringBuffer.toString();
    }

739. 每日温度

public class LeetCode739 {

    /**
     * 在数组里面,找比当前元素大的数字位置距离,比如[73,74]应该输出1
     * 使用递减栈
     */
    public int[] dailyTemperatures(int[] T) {
        int len = T.length;
        Stack<Integer> stack = new Stack<>();
        int[]res = new int[len];
        for (int i = 0; i < T.length; i ++){
            while (!stack.isEmpty() && T[i] > T[stack.peek()]){
                int t = stack.peek();
                stack.pop();
                res[t] = i-t;
            }
            stack.push(i);
        }
        return res;
    }

 

1047. 删除字符串中的所有相邻重复项
public String removeDuplicates(String S){if(S == null || S.length()==0){return"";}/** * 利用栈就可以完成,如果两个字母一样就弹出栈 * 时间复杂度O(N) 空间复杂度O(N) */ Stack<Character> stack =newStack<>();char strArr[]= S.toCharArray();for(int i =0; i < strArr.length; i++){if(stack.isEmpty()|| strArr[i]!=stack.peek()){ stack.push(strArr[i]);}else{ stack.pop();}} StringBuffer stringBuffer =newStringBuffer();for(Character character : stack){ stringBuffer.append(character);}return stringBuffer.toString();}
739. 每日温度
/** * 在数组里面,找比当前元素大的数字位置距离,比如[73,74]应该输出1 * 使用递减栈 * 代码参考:https://www.cnblogs.com/grandyang/p/8097513.html */publicint[]dailyTemperatures(int[] T){int len = T.length; Stack<Integer> stack =newStack<>();int[]res =newint[len];for(int i =0; i < T.length; i ++){while(!stack.isEmpty()&& T[i]> T[stack.peek()]){int t = stack.peek(); stack.pop(); res[t]= i-t;} stack.push(i);}return res;}

 

 
posted @ 2019-09-03 13:01  WuCola  阅读(79)  评论(0)    收藏  举报