【面试算法题】Java Stack 类的使用

Java Stack 类
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
堆栈只定义了默认构造函数,用来创建一个空栈。

常用方法
1 boolean empty()
测试堆栈是否为空。

2 Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。

3 Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。

4 Object push(Object element)
把项压入堆栈顶部。

5 int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

题目:

给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。

有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
3、注意空字符串可被认为是有效字符串。

如:"(([]){})"

题解:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;

public class TestHashMapBoolean {

    public static boolean isValid(String s) {

        HashMap<Character,Character> ss = new HashMap<Character,Character>();
        ss.put(‘(‘,‘)‘);
        ss.put(‘{‘,‘}‘);
        ss.put(‘[‘,‘]‘);

        HashMap<Character,Boolean> sbool = new HashMap<Character,Boolean>();
        sbool.put(‘(‘,true);
        sbool.put(‘{‘,true);
        sbool.put(‘[‘,true);
        sbool.put(‘)‘,false);
        sbool.put(‘}‘,false);
        sbool.put(‘]‘,false);

        ArrayList<Character> sList=new ArrayList<Character>();

        for(int i=0; i<s.length();i++){
            sList.add(s.charAt(i));
        }

        if(sList.size() == 0){
            return true;
        }

        Stack<Character> stack = new Stack<Character>();

        for(int i=0; i<sList.size();i++){
            if(stack.empty()) {
                stack.push(sList.get(i));
            }else if (sbool.get(stack.peek()) && ss.get(stack.peek()).equals(sList.get(i))) {
                stack.pop();
            }else {
                stack.push(sList.get(i));
            }

            }

        return stack.size() == 0 ? true:false;

        }

    public static void main(String[] args) {
        System.out.println(isValid("(([]){})"));

    }

}

原文地址:http://blog.51cto.com/devops2016/2310720

时间: 2024-11-05 18:57:26

【面试算法题】Java Stack 类的使用的相关文章

[Java]Stack类

Java Stack类顾名思义,实现堆栈.具体方法如下: import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack<String> stack = new Stack<String>(); System.out.println("now the stack is " + isEmpty(stack)); stack.push(&q

LeetCode算法题-Min Stack(Java实现)

这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小元素的堆栈. push(x) - 将元素x推入堆栈. pop() - 删除堆栈顶部的元素. top() - 获取顶部元素. getMin() - 检索堆栈中的最小元素. 例如: MinStack minStack = new MinStack(); minStack.push(-2); minSta

面试算法题:爬楼梯,N级楼梯有多少种走法?

By Long Luo 个人博客链接 最近去面试时,在一家小公司面试时,公司小BOSS给我出了一道算法题: 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法. 这个问题应该是一个很老的题目了,用中学数学来说,就是一个排列组合问题.当时拿到这个题目之后,首先想到使用递归的思想去解决这个问题: N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和. 先计算下0,1,2,3及楼梯有多少种走法: 1 --> 1 2 --> 11 2

常考面试算法题之暴力枚举

结合2017春招和秋招真题,以下几类算法题最常考,汇总了一下: 好多鱼! 牛牛有一个鱼缸.鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸.鱼缸内存在着大鱼吃小鱼的定律.经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B.考虑到这个,牛牛要放入的鱼就需要保证: 1.放进去的鱼是安全的,不会被其他鱼吃掉 2.这条鱼放进去也不能吃掉其他鱼 鱼缸里面已经存在的鱼已经相

一道看似非常难的面试算法题

这是昨天面试百度时碰到的一道算法题:任意数分三组,使得每组的和尽量相等.由于时间仓促,加之面试时头昏脑涨,这道题没做出来甚至没有给出思路,这让我多少有些遗憾和不甘.因为最近接触算法的东西较多而且本身对算法感兴趣,所以回家之后绞尽脑汁想把这题做出来.其实刚看到这题时感觉不难,但是因为数字个数及数值的不确定,我感觉这题越想越难.昨天一晚上没有睡好,甚至做梦都在想这题! 今天上午在多个群里问了这题,都没有给出思路,真是绝望至极.很多人都说 n/3 的思路,其实这种思路一开始就是死胡同.本人属于那种不会

面试准备(三) Java 异常类层次结构

在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.这类容易出选择题 考试你是否掌握了异常类并清楚哪些异常类必须捕获 下面的图展示了Java异常类的继承关系. 图1 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 CHecked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到

java 面试算法题

/** * 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从 * 出列的下一个人开始报数,数到第m个人又出列,-,如此反复到所有的人全部出列为 * 止.设n个人的编号分别为1,2,-,n,打印出出列的顺序:要求用java 实现. */ @org.junit.Test public void test3() { //初始化整个队伍 int[] peos = new int[9]; for (int i = 1; i < peos.length+1; i++) { peos[i-1

几个面试经典算法题Java解答

题目一: public class testClockwiseOutput { //顺时针打印一个矩阵 @Test public void test(){ int[][] num = new int[100][100]; int n = 4; int count =1; for(int i=0;i<n;i++){ for(int j =0;j<n;j++){ num[i][j]=count++; } } output(num,0,n-1); } public void output(int[]

远景面试算法题——FolderSize

描述 文件被存储在磁盘上的时候,通常为cluster方式.每个cluster具有固定的大小,一个文件所消耗的空间量始终是cluster大小的整数倍.因此,如果cluster的大小为100字节,165字节的文件将会使用实际使用200字节的存储空间,造成35个空间的浪费. 一个folder会有多个file,每个file单独计算浪费空间:如果某个folder没有出现,浪费空间为0 定义 Method signature: int[] calculateWaste(String[] files, int