https://leetcode.com/problems/decode-string/submissions/

Input: s = "3[a]2[bc]"
Output: "aaabcbc"
Input: s = "3[a2[c]]"
Output: "accaccacc"

애먹었다. 두개의 stack을 가지고 수와 알파벳을 구분해서 쌓아준다.

그렇지만 숫자는 일의자리수뿐 아니라 10, 100의자리수도 생각해야 했다.

알파벳 또한 언제 나눠줄지, 합쳐 줄 것 인지까지.

class Solution {
public:
	string decodeString(string s) {
		std::stack<string> stringStack;
		std::stack<string> countStack;
		string result = "";
		string numString = "";
		
		for (int i = 0; i < s.size(); ++i)
		{
			if (s[i] <= '9')
			{
				numString.push_back(s[i]);
			}
			else  // 숫자가 아닐때
			{
				{
					if (s[i] == '[')
					{
						countStack.push(numString);
						numString = "";

						stringStack.push("");
					}
					else if (s[i] == ']')
					{
						int count = atoi(countStack.top().c_str());
						for (int i = 0; i < count; ++i)
						{
							result += stringStack.top();
						}
						countStack.pop();
						stringStack.pop();
						if (stringStack.empty())
							stringStack.push(result);
						else
							stringStack.top() += result;
						result = "";
					}
					else
					{
						string temp;
						temp.push_back(s[i]);
						if(stringStack.empty())
							stringStack.push(temp);
						else if (stringStack.top() == "")
							stringStack.top() = temp;
						else
							stringStack.top() += temp;
					}
				}
			}
		}

		return stringStack.top();
	}
};

Runtime: 4 ms, faster than 17.42% of C++ online submissions for Decode String.

Memory Usage: 6.4 MB, less than 94.89% of C++ online submissions for Decode String.

Runtime: 0 ms, faster than 100.00% of C++ online submissions for Decode String.

Memory Usage: 6.5 MB, less than 89.69% of C++ online submissions for Decode String.