# Solving Leetcode Interviews in Seconds with AI: Magical String


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "481" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> 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  

	# Explanation
	Here's an efficient solution to the magical string problem:

*   **Generate the magical string:** Construct the string iteratively based on the given rules.  Use two pointers: one to read from the generated string (the 'reader') and another to write the next '1' or '2' (the 'writer').

*   **Count 1s:** As the magical string is generated, maintain a count of '1's in the first `n` positions.

*   **Optimization:** Instead of actually concatenating strings, directly compute the number of '1's.

*   **Runtime Complexity:** O(n)
*   **Storage Complexity:** O(n)

	
	# Code
	```python
	def magicalString(n: int) -> int:
    if n == 0:
        return 0
    if n <= 3:
        return 1

    s = [1, 2, 2]
    i = 2  # Reader pointer
    j = 3  # Writer pointer
    count = 1

    while j < n:
        for _ in range(s[i]):
            if j < n:
                s.append(3 - s[-1])  # Alternate between 1 and 2
                if s[-1] == 1:
                    count += 1
                j += 1
            else:
                break
        i += 1

    return count
	```
			
