From 1aa4c9565504154e121f0376086c9613550f561e Mon Sep 17 00:00:00 2001 From: stubborn-akshat <116001144+stubborn-akshat@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:58:13 +0530 Subject: [PATCH] Count_and_say.java --- 38. Count and Say | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 38. Count and Say diff --git a/38. Count and Say b/38. Count and Say new file mode 100644 index 0000000..9be1bdb --- /dev/null +++ b/38. Count and Say @@ -0,0 +1,31 @@ +class Solution { + public String countAndSay(int n) { + if (n <= 0) { + throw new IllegalArgumentException("Invalid input"); + } + + StringBuilder sb = new StringBuilder("1"); + for (int i = 2; i <= n; i++) { + sb = getNextState(sb); + } + return sb.toString(); + } + + private StringBuilder getNextState(StringBuilder curSb) { + StringBuilder nextSb = new StringBuilder(); + int len = curSb.length(); + int i = 0; + + while (i < len) { + char c = curSb.charAt(i++); + int count = 1; + while (i < len && c == curSb.charAt(i)) { + count++; + i++; + } + nextSb.append(count).append(c); + } + + return nextSb; + } +}