Statistics

Problem Statement for "ParenthesesDiv2Medium"

Problem Statement

Correct parentheses sequences can be defined recursively as follows:
  • The empty string "" is a correct sequence.
  • If "X" and "Y" are correct sequences, then "XY" (the concatenation of X and Y) is a correct sequence.
  • If "X" is a correct sequence, then "(X)" is a correct sequence.
  • Each correct parentheses sequence can be derived using the above rules.
Examples of correct parentheses sequences include "", "()", "()()()", "(()())", and "(((())))".


You have a String s of length n, where n is even. Your task is to change it into a correct parentheses sequence. In order to do that, you are allowed to flip some parentheses. Flipping a parenthesis changes it from '(' to ')' and vice versa.


There is always a way to change s into a correct parentheses sequence by doing at most (n/2)+1 flips. Find any such sequence of flips. Return a int[] containing a sequence of 0-based indices of parentheses in s you want to flip.

Definition

Class:
ParenthesesDiv2Medium
Method:
correct
Parameters:
String
Returns:
int[]
Method signature:
int[] correct(String s)
(be sure your method is public)

Constraints

  • s will contain between 2 and 50 characters, inclusive.
  • The length of s will be even.
  • Each character in s will be '(' or ')'.

Examples

  1. ")("

    Returns: {0, 1 }

    The returned sequence represents the following sequence of changes: Start with the string ")(". Flip character 0. This produces the string "((". Flip character 1. This produces the string "()", which is a corrent parentheses sequence.

  2. ")))))((((("

    Returns: {0, 2, 4, 5, 7, 9 }

    Performing the flips described by the returned sequence changes the given string into the corrent parentheses sequence "()()()()()". The answer {2, 0, 4, 9, 7, 5} would also be valid, as the order in which we perform the flips does not matter. However, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} is not a valid answer: this sequence of flips does produce a correct parentheses sequence but the number of flips is too large. As the length of s is 10, we may only perform at most 10/2 + 1 = 6 flips.

  3. "((()"

    Returns: {1 }

  4. ")))(()(())))))"

    Returns: {0, 1, 2 }

    Here, {0, 1, 2, 3, 3} would also be a valid answer. Flipping the same parenthesis twice is allowed, even though it is clearly useless.

  5. "()()()()()()()()()()()()()"

    Returns: { }

  6. "))))))(()())(()()))))))))))())"

    Returns: {0, 2, 4, 7, 10, 13, 16, 18, 20, 22, 24, 28, 8, 27 }

  7. ")()()())()"

    Returns: {6, 0, 5 }

  8. "))))())))))()))))))))))))))))))(()(())))))))))"

    Returns: {0, 2, 6, 8, 12, 14, 16, 18, 20, 22, 24, 26, 28, 35, 36, 38, 40, 42, 44, 10, 31 }

  9. ")()()(())((())(())()"

    Returns: {11, 12, 15, 16, 0, 9 }

  10. ")(((()()(()("

    Returns: {3, 9, 0, 11 }

  11. ")()())((((()())))()))()(()))"

    Returns: {4, 7, 9, 14, 18, 26, 0, 23 }

  12. "(((((((((()((((((((((("

    Returns: {1, 3, 5, 7, 9, 13, 15, 17, 19, 21, 10, 11 }

  13. ")))((((("

    Returns: {0, 5, 7, 2, 3 }

  14. ")))()(())()(((()))))"

    Returns: {0, 13, 16, 18, 2, 11 }

  15. "))))))))))))))))()))))))))))))))))"

    Returns: {0, 2, 4, 6, 8, 10, 12, 14, 18, 20, 22, 24, 26, 28, 30, 32 }

  16. ")))))))()))))))))))))))())))"

    Returns: {0, 2, 4, 8, 10, 12, 14, 16, 18, 20, 24, 26, 6, 23 }

  17. ")(((((((()((((((((((((()(((((((((("

    Returns: {3, 5, 7, 11, 13, 15, 17, 19, 21, 25, 27, 29, 31, 33, 0, 1 }

  18. "(()())))(((((()((())()"

    Returns: {1, 4, 6, 9, 11, 13, 17, 18, 2, 15 }

  19. "((((((()((((()((()(()(()(())))()()(()((()))(()(((("

    Returns: {1, 3, 5, 9, 11, 15, 19, 25, 26, 28, 35, 39, 40, 47, 49, 20, 43 }

  20. ")((((()(()(("

    Returns: {3, 5, 11, 0, 7 }

  21. "(((((((((((((((((((((((((("

    Returns: {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25 }

  22. "(((()(((()(((())))((()((()(((("

    Returns: {1, 3, 7, 11, 13, 14, 16, 19, 23, 27, 29, 4, 5 }

  23. ")))))()))))))))))))))((()())))))))))())))())"

    Returns: {0, 2, 6, 8, 10, 12, 14, 16, 18, 23, 26, 28, 30, 32, 34, 38, 42, 4, 41 }

  24. ")(()))()()))())())((()())())()"

    Returns: {4, 10, 16, 19, 26, 0, 25 }

  25. "))))))))))))))))))()"

    Returns: {0, 2, 4, 6, 8, 10, 12, 14, 16 }

  26. "(((()))())((())))()))("

    Returns: {1, 3, 4, 8, 11, 14, 18, 6, 21 }

  27. "(((()((((()(()"

    Returns: {1, 3, 7, 9, 4, 11 }

  28. "))())))))()))())))()()()"

    Returns: {0, 4, 6, 10, 14, 16, 8, 13 }

  29. "()(()(())))()))))))(())(())))())(()()))))(())())))"

    Returns: {3, 8, 12, 14, 16, 26, 30, 33, 36, 38, 46, 48, 4, 45 }

  30. "))(((((((((((((((((((((()((((((((((((((((("

    Returns: {0, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 27, 29, 31, 33, 35, 37, 39, 41, 24, 25 }

  31. ")))))))))))))))))))))))))("

    Returns: {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 25 }

  32. "))))))())))))))))())))))))))))))))))))))))))"

    Returns: {0, 2, 4, 8, 10, 12, 14, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 16, 17 }

  33. ")((((((("

    Returns: {3, 5, 7, 0, 1 }

  34. "))())()(((()))))()()"

    Returns: {0, 9, 12, 14, 4, 7 }

  35. "())))))))))))))))()()))(()))))())())()))"

    Returns: {2, 4, 6, 8, 10, 12, 14, 20, 26, 28, 34, 38, 16, 33 }

  36. "(()()))())()))))))))))))))))))))))))))))(((((()((("

    Returns: {1, 4, 8, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 41, 43, 45, 49, 2, 47 }

  37. ")()()()("

    Returns: {0, 7 }

  38. ")()()()()()("

    Returns: {0, 11 }

  39. ")()()()()()()()()()()()()()()()("

    Returns: {0, 31 }

  40. ")))))))))))))))))))))))((((((((((((((((((((((("

    Returns: {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 22, 23 }

  41. ")()()("

    Returns: {0, 5 }

  42. ")()((("

    Returns: {5, 0, 3 }

  43. ")((((())))()))()(())()))))()()(((())(((((())(()((("

    Returns: {3, 5, 6, 8, 12, 17, 18, 22, 24, 31, 33, 34, 37, 39, 41, 42, 45, 49, 0, 47 }

  44. "()()()()()()(((("

    Returns: {13, 15 }

  45. ")()("

    Returns: {0, 3 }

  46. "(((((("

    Returns: {1, 3, 5 }

  47. "(((((((((((((((((((("

    Returns: {1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }

  48. ")()()())"

    Returns: {6, 0, 5 }

  49. ")()()()()("

    Returns: {0, 9 }

  50. ")()()()()()()("

    Returns: {0, 13 }

  51. ")()()()()()()()("

    Returns: {0, 15 }

  52. "))(("

    Returns: {0, 3 }

  53. "(()()()())"

    Returns: {1, 8, 2, 7 }

  54. "(())"

    Returns: {1, 2 }

  55. "))))(((("

    Returns: {0, 2, 5, 7 }

  56. "(((("

    Returns: {1, 3 }

  57. ")))((("

    Returns: {0, 5, 2, 3 }

  58. ")()()()()()()()()("

    Returns: {0, 17 }

  59. ")()()()()()()()()()()()()()()("

    Returns: {0, 29 }

  60. "))"

    Returns: {0 }

  61. "(((((((((("

    Returns: {1, 3, 5, 7, 9 }

  62. ")()()()()()()()()()()()()("

    Returns: {0, 25 }


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: