面试记录 2019-09-28 下午(挂)

上机笔试,挂。
三个月不刷题,脑壳都懵了。
题目:
判断最长有效字符的长度,不能包含其他字符。

不要后面那个条件就和leetcode上的题是一样的,我理解错题了:()()((())) 和 ((()))()()应该返回10,我觉得返回6,虽然分别成对,但是是两种形式,应该区别开,实际上不用啊,所以我最后通过了60%的用例。
所以用栈,先入栈个-1,是为了方便计算。遇到左括号入栈,遇到右括号出栈,记录最长长度;遇到其他字符则将栈清空,记录当前位置。

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.nextLine();
            char[] chars = str.toCharArray();
            int max = 0;
            Stack<Integer> stack = new Stack<>();
            stack.push(-1);
            for (int i = 0; i < chars.length; i++) {
                char c = chars[i];
                if (c == '(') {
                    stack.push(i);
                } else if (c == ')'){
                    stack.pop();
                    if (stack.empty()) {
                        stack.push(i);
                    } else {
                        max = Math.max(max, i - stack.peek());
                    }
                } else {// 特殊符号
                    stack.clear();
                    stack.push(i);
                }
            }
            System.out.println(max);
        }
    }
}

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

相关阅读更多精彩内容

友情链接更多精彩内容