g0401_0500.s0481_magical_string.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
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