【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】

来源:互联网 发布:php 短信验证码生成 编辑:程序博客网 时间:2024/05/16 10:00

原题

  Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. 
  For "(()", the longest valid parentheses substring is "()", which has length = 2. 
  Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4. 

题目大意

  给定一个字符串,只包含小括号号,求最长的合法的小括号的数目。 

解题思路

  使用栈来实现 

代码实现

算法实现类

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>util<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Deque;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>util<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>LinkedList;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>util<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Stack</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> class Solution {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> int longestValidParentheses(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> s) {        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 用于记录待匹配的左括号和右括号的位置</span>        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Stack</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Integer</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> st <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Stack</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><></span>();        int <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">max</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;        for (int i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span> s<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>length(); i<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>) {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 如是当前字符是右括号,并且记录栈非空,并且前一个字符是左括号</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (s<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>charAt(i) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">')'</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>st<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>isEmpty() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> s<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>charAt(st<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>peek()) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'('</span>) {                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 左括号出栈</span>                st<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>pop();                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 求最大值</span>                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">max</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Math<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">max</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">max</span>, i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span> ((st<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>isEmpty()) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">?</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> : st<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>peek()));            }            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 其它情况就将字符入栈</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                st<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>push(i);            }        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">max</span>;    }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li></ul>

评测结果

  点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。

这里写图片描述

特别说明

欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47064939】

0 0
原创粉丝点击