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.