Given an encoded string, return its decoded string.
The encoding rule is: k[encoded_string]
, where the encoded_string
inside the square brackets is being repeated exactly k
times. Note that k
is guaranteed to be a positive integer.
You may assume that the input string is always valid; there are no extra white spaces, square brackets are well-formed, etc. Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k
. For example, there will not be input like 3a
or 2[4]
.
The test cases are generated so that the length of the output will never exceed 105
.
Example 1:
Input: s = "3[a]2[bc]" Output: "aaabcbc"
Example 2:
Input: s = "3[a2[c]]" Output: "accaccacc"
Example 3:
Input: s = "2[abc]3[cd]ef" Output: "abcabccdcdcdef"
Constraints:
1 <= s.length <= 30
s
consists of lowercase English letters, digits, and square brackets '[]'
.s
is guaranteed to be a valid input.s
are in the range [1, 300]
.
class Solution {
public String decodeString(String s) {
Stack numberStack = new Stack<>();
Stack mainStack = new Stack<>();
for(int i=0;i='0' && ch<='9'){ // identifing it is a number
int num = 0 ;
while(i='0' && s.charAt(i)<='9'){
num = num * 10 + (int)(s.charAt(i)-'0');
i++;
}
i--; // to maintain the loop variable
numberStack.push(num);
}else if ( ch != ']'){
mainStack.push(ch + "");
}else { // condition for ']'
String str = "";
while(!mainStack.peek().equals("[")){
str = mainStack.pop() + str ;
}
mainStack.pop();
int repetationNumber = numberStack.pop();
StringBuilder sb = new StringBuilder("") ;
while(repetationNumber>0){
sb.append(str);
repetationNumber--;
}
mainStack.push(sb.toString());
}
}
StringBuilder ans = new StringBuilder("");
while(mainStack.size()>0){
ans.insert(0,mainStack.pop());
}
return ans.toString();
}
}
class Solution {
public:
string decodeString(string s) {
stack> helper;
string ans;
int i=0;
while(i='0' and s[i]<='9')
{
int j=i;
while(s[i]>='0' and s[i]<='9')
{
i++;
}
int num= stoi(s.substr(j, i-j));
helper.push({num,""});
}
else if(s[i]>='a' and s[i]<='z')
{
int j=i;
while(s[i]>='a' and s[i]<='z') i++;
string curr= s.substr(j,i-j);
if(helper.empty()) ans+=curr;
else helper.top().second+=curr;
}
else if(s[i]==']')
{
int itr=helper.top().first;
string curr= "";
while(itr--)curr+=helper.top().second;
helper.pop();
if(helper.empty())
ans+=curr;
else
helper.top().second+=curr;
i++;
}
else i++;
}
return ans;
}
};
In this program, we have to decode a string encoded with a specific pattern that involves repeating substrings.
Office:- 660, Sector 14A, Vasundhara, Ghaziabad, Uttar Pradesh - 201012, India