【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了 (3)

最后的代码如下:

public int longestValidParentheses(String s) { if(s == null || s.length() < 1) return 0; int left = 0, right = 0, max = 0; // 从左到右 for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(') { left++; } else { right++; } if (left == right) { max = Math.max(max, 2 * right); } else if(right > left){ left = right = 0; } } left = right = 0; // 从右到左 for (int i = s.length() - 1; i >= 0; i--) { if (s.charAt(i) == '(') { left++; } else { right++; } if (left == right) { max = Math.max(max, 2 * left); } else if (left > right) { left = right = 0; } } return max; }

这种做法的时间复杂度为 O(n),空间复杂度为 O(1)。

总结

说时候,最后一种方法还是比较难想到了,从这次面试中也可以看出,千万不要看一道题很简单,有些题要做出来很简单,但是,如果要以最优解的方式做出来,难度马上指数上升。。

如果你后面看不大懂,建议多看几遍哦,这道题考的频率还是挺高的,主要是可以做的方法多,每种方法的效率又不一样,不过我这里必须给你们的提醒,就是平时在做题的时候,一定要寻找最优解,而不是 ac 了就不管了,应该多看看别人的解法。

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

1、点赞,可以让更多的人看到这篇文章
2、关注原创微信公众号『苦逼的码农』,为了巩固计算机基础知识(计算机网络+ 操作系统+数据库+Linux)以及算法,最近开了个微信公众号『苦逼的码农』,感兴趣的可以关注,重点讲解算法相关文章,嘻嘻。后台回复『电子书』送你一份精选电子书大礼包,包含各类技能的优质电子书

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssdgz.html