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

g0401_0500.s0481_magical_string.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0401_0500.s0481_magical_string;

// #Medium #String #Two_Pointers #2022_07_20_Time_5_ms_(93.33%)_Space_43_MB_(50.00%)

/**
 * 481 - Magical String\.
 *
 * Medium
 *
 * A magical string `s` consists of only `'1'` and `'2'` and obeys the following rules:
 *
 * *   The string s is magical because concatenating the number of contiguous occurrences of characters `'1'` and `'2'` generates the string `s` itself.
 *
 * The first few elements of `s` is `s = "1221121221221121122……"`. If we group the consecutive `1`'s and `2`'s in `s`, it will be `"1 22 11 2 1 22 1 22 11 2 11 22 ......"` and the occurrences of `1`'s or `2`'s in each group are `"1 2 2 1 1 2 1 2 2 1 2 2 ......"`. You can see that the occurrence sequence is `s` itself.
 *
 * Given an integer `n`, return the number of `1`'s in the first `n` number in the magical string `s`.
 *
 * **Example 1:**
 *
 * **Input:** n = 6
 *
 * **Output:** 3
 *
 * **Explanation:** The first 6 elements of magical string s is "122112" and it contains three 1's, so return 3.
 *
 * **Example 2:**
 *
 * **Input:** n = 1
 *
 * **Output:** 1
 *
 * **Constraints:**
 *
 * *   1 <= n <= 105
**/
public class Solution {
    public int magicalString(int n) {
        int[] a = new int[n + 2];
        int fast = 1;
        int slow = 1;
        int num = 1;
        while (fast <= n) {
            a[fast++] = num;
            if (a[slow++] == 2) {
                a[fast++] = num;
            }
            num = 3 - num;
        }
        int count = 0;
        for (int j = 1; j <= n; j++) {
            if (a[j] == 1) {
                count++;
            }
        }
        return count;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy