zoukankan      html  css  js  c++  java
  • 华为笔试题:反转括号间的字符串

    给出一个字符串 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;
        }
    };
  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
  • 原文地址:https://www.cnblogs.com/joker1937/p/14763335.html
Copyright © 2011-2022 走看看