1021. Remove Outermost Parentheses

A valid parentheses string is either empty `("")`, `"(" + A + ")"`, or `A + B`, where `A` and `B` are valid parentheses strings, and `+` represents string concatenation.  For example, `""`, `"()"`, `"(())()"`, and `"(()(()))"` are all valid parentheses strings.

A valid parentheses string `S` is primitive if it is nonempty, and there does not exist a way to split it into `S = A+B`, with `A` and `B` nonempty valid parentheses strings.

Given a valid parentheses string `S`, consider its primitive decomposition: `S = P_1 + P_2 + ... + P_k`, where `P_i` are primitive valid parentheses strings.

Return `S` after removing the outermost parentheses of every primitive string in the primitive decomposition of `S`.

Example 1:

```Input: "(()())(())"
Output: "()()()"
Explanation:
The input string is "(()())(())", with primitive decomposition "(()())" + "(())".
After removing outer parentheses of each part, this is "()()" + "()" = "()()()".
```

Example 2:

```Input: "(()())(())(()(()))"
Output: "()()()()(())"
Explanation:
The input string is "(()())(())(()(()))", with primitive decomposition "(()())" + "(())" + "(()(()))".
After removing outer parentheses of each part, this is "()()" + "()" + "()(())" = "()()()()(())".
```

Example 3:

```Input: "()()"
Output: ""
Explanation:
The input string is "()()", with primitive decomposition "()" + "()".
After removing outer parentheses of each part, this is "" + "" = "".
```

Note:

1. `S.length <= 10000`
2. `S[i]` is `"("` or `")"`
3. `S` is a valid parentheses string

1021. Remove Outermost Parentheses
``````struct Solution;

impl Solution {
fn remove_outer_parentheses(s: String) -> String {
let mut res: String = "".to_string();
let mut count = 0;
for c in s.chars() {
if c == '(' {
count += 1;
if count > 1 {
res.push(c);
}
} else {
count -= 1;
if count != 0 {
res.push(c);
}
}
}
res
}
}

#[test]
fn test() {
let s = "(()())(())".to_string();
let t = "()()()".to_string();
assert_eq!(Solution::remove_outer_parentheses(s), t);
let s = "(()())(())(()(()))".to_string();
let t = "()()()()(())".to_string();
assert_eq!(Solution::remove_outer_parentheses(s), t);
let s = "()()".to_string();
let t = "".to_string();
assert_eq!(Solution::remove_outer_parentheses(s), t);
}
``````