3.19面试总结

介绍一下自己:

  balabal,学校专业,实习经历,项目经验。

一些Java基础,接口和抽象类的区别,重载和重写,进程和线程,gc回收,都能说上来。内存泄露,不懂。

看到项目中用到了Redis,具体怎么用的。描述了一下。让在白板上具体演示一下。顺便讲了一下敏感词过滤的算法。

然后一道算法题,一串字符串,判断其中出现的三种括号(){ } [ ],是否匹配。 用栈实现,以此判断字符是否是括号,不是括号就跳过;是左括号就压入栈中;是右括号就peek一下,看两个括号是否匹配,不匹配返回false,遍历结束,判断栈是否为空,为空返回true,不空返回false。

package com.leeshuai;

import java.io.*;
import java.security.Key;
import java.util.*;

/**
 * @description:
 * @author: leeshuai
 * @create: 2018-03-15 20:28
 **/
public class Main{
    public static void main(String[] args) {
      String str="(asd)asdf[asdf]}";
        System.out.println(result(str));
    }
    public static int isNotChar(char c){
        char[] chs={'[',']','(',')','{','}'};
        for(int i=0;i<chs.length;i++){
            if(c==chs[i])
                return i;        //是括号就返回下标,每队括号下标相邻;
        }
        return -1;            //不是括号返回-1;
    }
    public static boolean result(String str){
        char [] chs=str.toCharArray();
        Stack<Character> stack=new Stack<>();
        for(int i=0;i<chs.length;i++){
            if(isNotChar(chs[i])%2==0)     //左括号,压入栈
                stack.push(chs[i]);
             if(stack.isEmpty()&&isNotChar(chs[i])%2==1)    //栈为空,右括号,肯定错误,返回false
                 return false;
             if(isNotChar(chs[i])%2==1&&stack.isEmpty()==false){  //栈不为空,右括号,取出站最顶端的括号,看是否匹配,不匹配返回false,匹配弹出。
                char c=stack.peek();
                if(isNotChar(chs[i])-isNotChar(c)!=1)
                    return false;
                else{
                    stack.pop();
                }
            }
        }
        if(stack.isEmpty())            //最后判断栈是否为空,为空返回true,否则返回false,如果多了几个右括号会出现这种情况
          return true;
        return false;
    }
}

 

posted @ 2018-03-19 21:26  Lee_Shuai  阅读(133)  评论(0编辑  收藏  举报