[Leetcode] 32. Longest Valid Parentheses โ
Problem โ
์ฌ๋ฐ๋ฅธ ๊ดํธ๊ฐ ์ฐ์์ ์ผ๋ก ๋์ค๋ ์ต๋ ๊ธธ์ด.
Solution โ
์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ํตํด ์ด๋ฆฐ๊ดํธ(left
)์ ๋ซํ๊ดํธ(right
)์ ์์ด ์ผ์นํ๋์ง ํ์ธํ๋ค.
๋จผ์ ์ด๋ฆฐ๊ดํธ์๋ํ ์ต๋๊ฐ์๋ฅผ ๊ตฌํ๊ณ ๊ทธ ํ์ ๋ซํ๊ดํธ์๋ํ ์ต๋๊ฐ์๋ฅผ ๊ตฌํจ์ผ๋ก์จ ๋ชจ๋ ๊ดํธ๋ฅผ ๊ฒ์ฌํ๋ค. ์ด๋ฆฐ๊ดํธ์ ๊ฒ์ฌ๋ฅผ ์์ํ ๋, ์ด๋ฆฐ ๊ดํธ๋ก ์์ํด์ผ ์ฌ๋ฐ๋ฅธ ๊ดํธ์์ผ๋ก right
๊ฐ left
๋ฅผ ๋์ง ์๋๋ก(๋์๋ค๋ฉด ์นด์ดํ
x)ํ๋ค. ์ด๋ฆฐ ๊ดํธ๋ก ์์ํ ๋ ๋ซํ๊ดํธ์ ๊ฐ์ ๊ฐฏ์๋ฅผ ๊ฐ์ง๋ ์๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฌธ๋ฒ์ ๋์ด๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ดํธ์ ๊ฐฏ์๋ฅผ ๋น๊ตํ์ฌ ์ต๋๊ฐ์ ์ ์ฅํ๋ค.
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ์งํํ๋ฉด์ ๋ซํ๊ดํธ์๋ํ ์ด๋ฆฐ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋์ง๋ฅผ ํ์ธํ์ฌ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ค.
JS Code โ
/**
* @param {string} s
* @return {number}
*/
var longestValidParentheses = function(s) {
let left = 0, right = 0
let answer = 0
for(let i = 0 ; i < s.length; i++) {
if (s[i] === '(') left++
else if(s[i] === ')') right++
if (left === right) answer = Math.max(answer, right * 2)
else if(left < right) left = right = 0
}
left = right = 0
for(let i = s.length-1 ; 0 <= i ; i--) {
if (s[i] === '(') left++
else if (s[i] === ')') right++
if (left === right) answer = Math.max(answer, left * 2)
else if (left > right) left = right = 0
}
return answer
};