All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0301_0400.s0394_decode_string.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0301_0400.s0394_decode_string;

// #Medium #Top_100_Liked_Questions #String #Stack #Recursion #Level_1_Day_14_Stack #Udemy_Strings
// #Big_O_Time_O(n)_Space_O(n) #2022_07_15_Time_1_ms_(87.68%)_Space_41.2_MB_(83.30%)

/**
 * 394 - Decode String\.
 *
 * Medium
 *
 * 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; 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 won't be input like `3a` or `2[4]`.
 *
 * **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" 
 *
 * **Example 4:**
 *
 * **Input:** s = "abc3[cd]xyz"
 *
 * **Output:** "abccdcdcdxyz" 
 *
 * **Constraints:**
 *
 * *   `1 <= s.length <= 30`
 * *   `s` consists of lowercase English letters, digits, and square brackets `'[]'`.
 * *   `s` is guaranteed to be **a valid** input.
 * *   All the integers in `s` are in the range `[1, 300]`.
**/
public class Solution {
    private int i = 0;

    public String decodeString(String s) {
        int count = 0;
        StringBuilder sb = new StringBuilder();
        while (i < s.length()) {
            char c = s.charAt(i);
            i++;
            if (Character.isLetter(c)) {
                sb.append(c);
            } else if (Character.isDigit(c)) {
                count = count * 10 + Character.getNumericValue(c);
            } else if (c == ']') {
                break;
            } else if (c == '[') {
                // sub problem
                String repeat = decodeString(s);
                while (count > 0) {
                    sb.append(repeat);
                    count--;
                }
            }
        }
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy