diff --git a/32. Longest Valid Parentheses/32. Longest Valid Parentheses.csproj b/32. Longest Valid Parentheses/32. Longest Valid Parentheses.csproj new file mode 100644 index 0000000..6585f82 --- /dev/null +++ b/32. Longest Valid Parentheses/32. Longest Valid Parentheses.csproj @@ -0,0 +1,11 @@ + + + + Exe + net10.0 + _32._Longest_Valid_Parentheses + enable + enable + + + diff --git a/32. Longest Valid Parentheses/Program.cs b/32. Longest Valid Parentheses/Program.cs new file mode 100644 index 0000000..6131fcc --- /dev/null +++ b/32. Longest Valid Parentheses/Program.cs @@ -0,0 +1,5 @@ +var sol = new Solution(); + +// System.Console.WriteLine(sol.LongestValidParentheses(")()())")); +// System.Console.WriteLine(sol.LongestValidParentheses("()(()")); +System.Console.WriteLine(sol.LongestValidParentheses("()(())")); \ No newline at end of file diff --git a/32. Longest Valid Parentheses/Solution.cs b/32. Longest Valid Parentheses/Solution.cs new file mode 100644 index 0000000..a9627ac --- /dev/null +++ b/32. Longest Valid Parentheses/Solution.cs @@ -0,0 +1,43 @@ +public class Solution +{ + struct Item + { + public char Sym; + public int Count; + public char? PrevSym; + } + + public int LongestValidParentheses(string s) + { + var stack = new Stack(); + var answer = 0; + foreach (var ch in s) + { + if (stack.Count > 0 && (stack.Peek().Sym == '(' || stack.Peek().PrevSym == '(') && ch == ')') + { + var prev = stack.Pop(); + var count = 2; + if (prev.Sym == '#') + { + stack.Pop(); + count += prev.Count; + } + while (stack.Count > 0 && stack.Peek().Sym == '#') + count += stack.Pop().Count; + char? prevSym = null; + if (stack.Count > 0) + prevSym = stack.Peek().Sym; + stack.Push(new Item() { Sym = '#', Count = count, PrevSym = prevSym }); + answer = Math.Max(answer, count); + } + else + { + stack.Push(new Item() { Sym = ch, Count = 0 }); + + + } + } + + return answer; + } +} \ No newline at end of file diff --git a/Leetcode.sln b/Leetcode.sln index ea36914..172e7be 100644 --- a/Leetcode.sln +++ b/Leetcode.sln @@ -191,6 +191,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "26. Remove Duplicates from EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "31. Next Permutation", "31. Next Permutation\31. Next Permutation.csproj", "{DC76DEDE-AF9D-429B-B53B-204E89E90EA0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "32. Longest Valid Parentheses", "32. Longest Valid Parentheses\32. Longest Valid Parentheses.csproj", "{9BD247FC-E91E-4FBD-9E97-6B917E4606D2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1329,6 +1331,18 @@ Global {DC76DEDE-AF9D-429B-B53B-204E89E90EA0}.Release|x64.Build.0 = Release|Any CPU {DC76DEDE-AF9D-429B-B53B-204E89E90EA0}.Release|x86.ActiveCfg = Release|Any CPU {DC76DEDE-AF9D-429B-B53B-204E89E90EA0}.Release|x86.Build.0 = Release|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Debug|x64.ActiveCfg = Debug|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Debug|x64.Build.0 = Debug|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Debug|x86.ActiveCfg = Debug|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Debug|x86.Build.0 = Debug|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Release|Any CPU.Build.0 = Release|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Release|x64.ActiveCfg = Release|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Release|x64.Build.0 = Release|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Release|x86.ActiveCfg = Release|Any CPU + {9BD247FC-E91E-4FBD-9E97-6B917E4606D2}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE