ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode17--用栈操作构建数组和整理字符串

2021-01-09 10:58:19  阅读:186  来源: 互联网

标签:deque target -- 用栈 数组 LeetCode17 Push 读取


1.用栈操作构建数组

//给你一个目标数组 target 和一个整数 n。每次迭代,需要从 list = {1,2,3..., n} 中依序读取一个数字。 
//
// 请使用下述操作来构建目标数组 target : 
//
// 
// Push:从 list 中读取一个新元素, 并将其推入数组中。 
// Pop:删除数组中的最后一个元素。 
// 如果目标数组构建完成,就停止读取更多元素。 
// 
//
// 题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。 
//
// 请返回构建目标数组所用的操作序列。 
//
// 题目数据保证答案是唯一的。 
//
// 
//
// 示例 1: 
//
// 
//输入:target = [1,3], n = 3
//输出:["Push","Push","Pop","Push"]
//解释: 
//读取 1 并自动推入数组 -> [1]
//读取 2 并自动推入数组,然后删除它 -> [1]
//读取 3 并自动推入数组 -> [1,3]
// 
//
// 示例 2: 
//
// 
//输入:target = [1,2,3], n = 3
//输出:["Push","Push","Push"]
// 
//
// 示例 3: 
//
// 
//输入:target = [1,2], n = 4
//输出:["Push","Push"]
//解释:只需要读取前 2 个数字就可以停止。
// 
//
// 示例 4: 
//
// 
//输入:target = [2,3,4], n = 4
//输出:["Push","Pop","Push","Push","Push"]
// 
//
// 
//
// 提示: 
//
// 
// 1 <= target.length <= 100 
// 1 <= target[i] <= 100 
// 1 <= n <= 100 
// target 是严格递增的 
// 
// Related Topics 栈
public List<String> buildArray(int[] target, int n) {
        Deque<Integer> deque = new LinkedList<Integer>();
        List<String> list = new ArrayList<>();
        int j = 0;
        for (int i = 1; i <= n; i++) {
            deque.push(i);
            list.add("Push");
            if(target[j] != i){
                deque.pop();
                list.add("Pop");
            }else {
                j++;
            }
            if(j==target.length){
                break;
            }
        }
        return list;
    }

2.整理字符串

//给你一个由大小写英文字母组成的字符串 s 。 
//
// 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 
//
// 
// 若 s[i] 是小写字符,则 s[i+1] 不可以是相同的大写字符。 
// 若 s[i] 是大写字符,则 s[i+1] 不可以是相同的小写字符。 
// 
//
// 请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。 
//
// 请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。 
//
// 注意:空字符串也属于整理好的字符串,尽管其中没有任何字符。 
//
// 
//
// 示例 1: 
//
// 
//输入:s = "leEeetcode"
//输出:"leetcode"
//解释:无论你第一次选的是 i = 1 还是 i = 2,都会使 "leEeetcode" 缩减为 "leetcode" 。
// 
//
// 示例 2: 
//
// 
//输入:s = "abBAcC"
//输出:""
//解释:存在多种不同情况,但所有的情况都会导致相同的结果。例如:
//"abBAcC" --> "aAcC" --> "cC" --> ""
//"abBAcC" --> "abBA" --> "aA" --> ""
// 
//
// 示例 3: 
//
// 
//输入:s = "s"
//输出:"s"
// 
//
// 
//
// 提示: 
//
// 
// 1 <= s.length <= 100 
// s 只包含小写和大写英文字母 
// 
// Related Topics 栈 字符串
public String makeGood(String s) {
        Deque<Character> deque = new LinkedList();
        String res = "";
        deque.push(s.charAt(0));
        if(s.length()==1){
            return s;
        }
        for (int i = 1; i < s.length(); i++) {
            //if(deque.size()>0 && s.charAt(i) == caps(deque.peek())){
            if(deque.size()>0 && (s.charAt(i) ^ deque.peek()) == 32){
                deque.pop();
            }else {
                deque.push(s.charAt(i));
            }
        }
        while(!deque.isEmpty()){
            res += deque.pop();
        }
        String reverse = new StringBuffer(res).reverse().toString();
        return reverse;
    }
    Character caps(Character c){
        if(Character.isLowerCase(c)){
            return Character.toUpperCase(c);
        }else{
            return Character.toLowerCase(c);
        }
    }

 

标签:deque,target,--,用栈,数组,LeetCode17,Push,读取
来源: https://blog.csdn.net/qq_40971025/article/details/112388568

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有