Count and Say in Python

PythonServer Side ProgrammingProgramming

Here we will see the Count and Say sequence. This is a sequence whose few terms are like below −

  • 1
  • 11
  • 21
  • 1211
  • 111221

The string will be read like

  • 1 (One)
  • 11 (One 1) So read the previous 1, and say “One 1”
  • 21 (Two 1) So read the previous 11, and say “Two 1”
  • 1211 (One 2 one 1) So read the previous 21, and say “One 2 one 1”
  • 111221 (One 1 one 2 two 1) So read the previous 1211, and say “One 1 one 2 two 1”

Suppose we have a number n, 1 <= n < = 30, then we have to generate nth term.

To solve this, we will follow this approach −

  • set s := “1”
  • if n = 1, then return s
  • for i := 2 to n + 1
    • j := 0, temp := “”, curr = “” and count := 0
    • while j < length of s, do
      • if curr is “”, then curr := s[j], count := 1 and increase j by 1
      • else if curr is s[j], then increase count and j by 1
      • otherwise temp := temp + count as string + curr, curr = “”, count := 0
    • temp := temp + count as string + curr
  • return s

Let us see the following implementation to get better understanding −

Example

 Live Demo

class Solution(object):
   def countAndSay(self, n):
      """
      :type n: int
      :rtype: str
      """
      s = "1"
      if n == 1:
         return s
      for i in range(2,n+1):
         j = 0
         temp = ""
         curr = ""
         count = 0
         while j<len(s):
            #print(curr,count)
            if curr =="":
               #print(curr)
               curr=s[j]
               count=1
               j+=1
            elif curr == s[j]:
               #print(curr)
               count+=1
               j+=1
            else:
               #print(count,curr)
               temp+= str(count) + curr
               curr=""
               count = 0
               #print(temp)
         temp+=str(count) + curr
         s=temp
      return s
ob1 = Solution()
print(ob1.countAndSay(6))

Input

print(ob1.countAndSay(6))

Output

312211
raja
Published on 08-Jan-2020 15:15:23
Advertisements