From ac6c15a29542a13e14ceea7619c0a0bf543aed02 Mon Sep 17 00:00:00 2001 From: Lam Haoyin Date: Wed, 16 Mar 2022 12:07:13 +0800 Subject: [PATCH] add: 220315 [cpp] --- cpp/2203/220315.cpp | 47 +++++++++++++++++++++++++++++++++++++++++ cpp/2203/CMakeLists.txt | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 cpp/2203/220315.cpp diff --git a/cpp/2203/220315.cpp b/cpp/2203/220315.cpp new file mode 100644 index 0000000..2cc6ce1 --- /dev/null +++ b/cpp/2203/220315.cpp @@ -0,0 +1,47 @@ +#include +#include +#include + +class Solution { +public: + static std::string minRemoveToMakeValid(const std::string& s) { + int n = s.length(), stackSize = 0; + std::stack rem; + for (int i = 0; i < n; ++i) { + switch (s[i]) { + case '(': + ++stackSize; + rem.push(i); + break; + case ')': + if (stackSize <= 0) { + rem.push(i); + } else { + --stackSize; + rem.pop(); + } + } + } + int remSize = rem.size(); + int* rems = new int[remSize]; + for (int* ptr = rems + remSize - 1; !rem.empty(); ptr = ptr > rems ? ptr - 1 : ptr) { + *ptr = rem.top(); + rem.pop(); + } + + std::string ret; + for (int p1 = 0, p2 = 0; p1 < n; ++p1) { + if (p1 == rems[p2]) + ++p2; + else + ret.push_back(s[p1]); + } + + return ret; + } +}; + +int main() { + std::cout << Solution::minRemoveToMakeValid("a)b(c)d"); + return 0; +} diff --git a/cpp/2203/CMakeLists.txt b/cpp/2203/CMakeLists.txt index 9c7cc24..c52f182 100644 --- a/cpp/2203/CMakeLists.txt +++ b/cpp/2203/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2203) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2203 220315-CN.cpp) +ADD_EXECUTABLE(2203 220315.cpp)