c++ stack

压缩算法

http://www.nowcoder.com/questionTerminal/ebf85b76361245f4a3ac273e6876c662

class Solution {
public:

    string compress(string str) {
        stack<char> st;
        for (int i = 0; i < str.size(); i++) {
            //HG[3|B[2|CA]]F
            if (str[i] == ']') {
                string tmp;//CA
                while (!st.empty() && st.top() != '|') {
                    tmp = st.top() + tmp;
                    st.pop();
                }
                st.pop();//pop()'|'
                string s1 = "";//s1代表tmp的叠加次数
                while (!st.empty() && st.top() != '[') {
                    s1 = st.top() + s1;
                    st.pop();
                }
                st.pop();//pop'['
                int t1 = stoi(s1);
                string s2 = "";//s2代表哦解压缩后重新压入栈中的srting
                while (t1) {
                    s2 += tmp;
                    t1--;
                }
                for (int j = 0; j < s2.size(); j++)
                    st.push(s2[j]);
            }else{
                st.push(str[i]);
            }
        }
        string ans = "";
        while (!st.empty()) {
            ans = st.top() + ans;
            st.pop();
        }
        return ans;
    }
};
全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
小谷围鸡肉卷阿姨:+1,腾子投完一动不动
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务