华为笔试题:反转括号间的字符串
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
示例 1:
输入:s = "(abcd)"
输出:"dcba"
示例 2:
输入:s = "(u(love)i)"
输出:"iloveu"
示例 3:
输入:s = "(ed(et(oc))el)"
输出:"leetcode"
示例 4:
输入:s = "a(bcdefghijkl(mno)p)q"
输出:"apmnolkjihgfedcbq"
class Solution { public: string reverseParentheses(string s) { stack<int> sk;//借助一个栈来存放所有'('出现的下标 for (int i = 0; i < s.size(); ++i) { char c = s[i]; if (c == '(') sk.push(i); else if (c == ')') { auto it = sk.top(); sk.pop(); reverse(s.begin()+it+1, s.begin()+i); } } auto it = s.begin(), e = s.end(); while (it != e) { if (*it == '(' || *it == ')') it = s.erase(it); else ++it; } return s; } };