1. <?php
    2. class Solution {
    3. /**
    4. * 最长有效括号
    5. * @param String $s
    6. * @return Integer
    7. */
    8. function longestValidParentheses($s) {
    9. $beginI = 0;
    10. $longest = 0;
    11. $stk = new SplStack();
    12. for ($i = 0; $i < strlen($s); $i++) {
    13. if ($s[$i] == '(') {
    14. $stk->push($i);
    15. } else {
    16. if ($stk->isEmpty()) {
    17. $beginI = $i;
    18. continue;
    19. }
    20. $stk->pop();
    21. // 如果当前栈为空 ? 对比当前连续正确的长度 与 最大长度 : 对比$i与栈顶元素长度 与 最大长度 ;
    22. $longest = $stk->isEmpty() ? max($i - $beginI, $longest) : max($i - $stk->top(), $longest);
    23. }
    24. }
    25. return $longest;
    26. }
    27. }
    28. $s = ")(()()(()";
    29. $cls = new Solution();
    30. $longest = $cls->longestValidParentheses($s);
    31. echo $longest;