String -- 栈

思路:

1. 利用栈先进后出的特性,将string中的元素放于栈中

3. 若是一个合理的开闭集合元素,则闭元素和开元素为同一个类型

4. 在栈中只放入开元素,在栈顶上应该为最后一个放入的元素。

5. 所以string的第一个闭元素应该和栈顶最后一个开元素配套。

6. 若栈顶没有元素,则返回一个虚拟值代替

7. 若栈顶值和string的第一个闭元素不配套,则返回false;

8. 遍历到闭元素,就比较栈顶的开元素

9. 若最后栈中没有元素了,则说明所有开闭元素配套

public boolean isValid(String s) {

        //新建一个栈,用于存放所有的开元素

        Stack<Character> stack = new Stack();

        //新建一个map,用于判断开闭元素是不是一个类型

        Map<Character, Character> map = new HashMap();

        map.put(')','(');

        map.put(']', '[');

        map.put('}','{');

        //遍历string中的每个字符

        for(int i = 0; i< s.length(); i++){

            //c为当前字符

            char c = s.charAt(i);

            //若c是一个闭元素

            if(map.containsKey(c)){

                //查找其对应的开元素

                char open = map.get(c);

                //判断栈顶是不是有元素,若有则弹出栈顶元素,若没有赋给pop一个虚拟值

                char pop = stack.isEmpty() ? 'E' :stack.pop();

                //比较对应的开元素是不是就是栈顶元素

                if(open != pop){

                    //若不是,则该string不成立

                    return false;

                }

            }else{

                //若c不是一个闭元素,则为开元素,将其放入栈中

                stack.push(c);

            }       

        }

        //若为一个合理的String,则栈中应该没有元素

        return stack.isEmpty(); 

    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 5,721评论 0 3
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,407评论 0 6
  • 栈数据结构 栈是一种遵从后进先出(LIFO)原则的有序集合。新增加的或删除的元素都保存在栈的同一端,称作栈顶,另外...
    kim_jin阅读 5,574评论 0 0
  • 这几天开车腰快断,昨晚走路去看个电影。看完电影坐公汽,错过718,误上4308,去美院晃了一圈,还换了个车,倒是有...
    3a08e03e222a阅读 1,468评论 0 2
  • 反思:昨日三只青蛙己完成,也做了每曰检视OmniFocus,感恩!一天还是可以做很多事的。另外的感受是杂事太多,真...
    D6_李晓红Dorothy阅读 1,387评论 0 0

友情链接更多精彩内容