Open In App

Generate the String of length N according to given conditions

Last Updated : 18 Jan, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

Given two integers N and M. Then your task is to output the string let’s say S of length N by following given conditions:

  • S must be formed by only the first M smaller case letters of the alphabetical series.
  • The length of LPS (Longest palindromic Substring) in S should be the minimum possible.

Examples:

Input: N = 7, M = 2

Output: 3 aaababb

Explanation: N = 7 means S must be of length 7 and M = 2 means it must be formed by first 2 alphabets [a, b] of alphabetical series [a. . . .z]. S = “aaababb” satisfies both of the given conditions. Minimum length of LPS is 3, which is S[1, 3] = “aaa”.

Input: N = 12, M = 26

Output: 1 hapybirthday

Explanation: It can be verified that output length of LPS is minimum possible and string follows both of the conditions mentioned.

Approach: Implement the idea below to solve the problem:

The problem is observation based. Let us see the observation by taking multiplce cases of length N.

We will create a function let say Generate_String(), which takes two integer N and M and generates a string S of length N based on the value of M.

  • If (M == 1), Then it generates a string of length N consisting of the character ‘a’ repeated N times.
  • If (M == 2), it will generate a string of length N based on the following pattern:
    • If N is 1, the string is “1 a”.
    • If N is 2, the string is “1 ab”.
    • If N is 3, the string is “2 abb”.
    • If N is 4, the string is “2 aabb”.
    • If N is 5, the string is “3 aabbb”.
    • If N is 6, the string is “3 aababb”.
    • If N is 7, the string is “3 aaababb”.
    • If N is 8 or greater, it generates a string of length N using the pattern “aababb”. The first four characters are “aabb”, followed by repetitions of “aababb” until the remaining length is less than 6. The remaining characters are then filled with the first R characters of the pattern, where R = (N % 6). If a is greater than 2, it generates a string of length N using the pattern “abc”. The string is generated by repeating the pattern “abc” as many times as possible, followed by the first R characters of the pattern, where R = (N % 3).

Steps were taken to solve the problem:

  • If (M == 1), then output “a” N times
  • Else if (M == 2)
    • If (N == 1), output “1 a”
    • Else If (N == 2), output “1 ab”
    • Else If (N == 3), output “2 abb”
    • Else If (N == 4), output “2 aabb”
    • Else If (N == 5), output “3 aabbb”
    • Else If (N == 6), output “1 3 aababb”
    • Else If (N == 7), output “1 aaababb”
    • Else If (N == 8), output “1 aaababbb”
    • Else
      • Q = N/6
      • R = N%6
      • S = “aababb”
      • Output (“4 “)
      • Output S, Q times using loop
      • Run a loop for i = 0 to i< R and follow below mentioned steps under the scope of loop:
        • Output S.charAt(i)
  • Else
    • Q = N/3
    • R = N%3
    • S = “abc”
    • Output (“1 “)
    • Output S, Q times using loops
    • Run a loop for i = 0 to i< R and follow below mentioned steps under the scope of loop:
      • Output S.charAt(i)

Code to implement the approach:

C++




#include <iostream>
#include <string>
 
// Function to generate appropriate string following given conditions
void generateString(int N, int M) {
    if (M == 1) {
        std::cout << N << " ";
        for (int i = 0; i < N; i++)
            std::cout << "a";
    } else if (M == 2) {
        if (N == 1) {
            std::cout << "1 a";
        } else if (N == 2) {
            std::cout << "1 ab";
        } else if (N == 3)
            std::cout << "2 abb";
        else if (N == 4)
            std::cout << "2 aabb";
        else if (N == 5)
            std::cout << "3 aabbb";
        else if (N == 6)
            std::cout << "3 aababb";
        else if (N == 7)
            std::cout << "3 aaababb";
        else if (N == 8)
            std::cout << "3 aaababbb";
        else {
            int q = N / 6;
            int r = N % 6;
            std::string s = "aababb";
            std::cout << "4 ";
            for (int i = 0; i < q; i++) {
                std::cout << s;
            }
            for (int i = 0; i < r; i++)
                std::cout << s[i];
        }
    } else {
        int q = N / 3;
        int r = N % 3;
        std::string s = "abc";
        std::cout << "1 ";
        for (int i = 0; i < q; i++)
            std::cout << s;
        for (int i = 0; i < r; i++)
            std::cout << s[i];
    }
}
 
// Driver function
int main() {
    // Inputs
    int N = 7, M = 2;
 
    // Function call
    generateString(N, M);
 
    return 0;
}


Java




// Java code to implment the approach
 
// Driver Class
public class GFG {
 
    // Main Class
    public static void main(String[] args)
    {
        // Inputs
        int N = 7, M = 2;
 
        // Function call
        Generate_string(N, M);
    }
 
    // Method to generate appropriate string
    // Following given conditions
    public static void Generate_string(int N, int M)
    {
 
        // Implementing the discussed approach
        if (M == 1) {
            System.out.print(N + " ");
            for (int i = 0; i < N; i++)
                System.out.print("a");
        }
        else if (M == 2) {
            if (N == 1) {
                System.out.print("1 a");
            }
            else if (N == 2) {
                System.out.print("1 ab");
            }
            else if (N == 3)
                System.out.print("2 abb");
            else if (N == 4)
                System.out.print("2 aabb");
            else if (N == 5)
                System.out.print("3 aabbb");
            else if (N == 6)
                System.out.print("3 aababb");
            else if (N == 7)
                System.out.print("3 aaababb");
            else if (N == 8)
                System.out.print("3 aaababbb");
            else {
                int q = N / 6;
                int r = N % 6;
                String s = "aababb";
                System.out.print("4 ");
                for (int i = 0; i < q; i++) {
                    System.out.print(s);
                }
                for (int i = 0; i < r; i++)
                    System.out.print(s.charAt(i));
            }
        }
        else {
            int q = N / 3;
            int r = N % 3;
            String s = "abc";
            System.out.print("1 ");
            for (int i = 0; i < q; i++)
                System.out.print(s);
            for (int i = 0; i < r; i++)
                System.out.print(s.charAt(i));
        }
    }
}


Python3




# Python code to implement the approach
 
# Method to generate appropriate string
# Following given conditions
def generate_string(N, M):
 
    # Implementing the discussed approach
    if M == 1:
        print(N, end=" ")
        for i in range(N):
            print("a", end="")
    elif M == 2:
        if N == 1:
            print("1 a", end="")
        elif N == 2:
            print("1 ab", end="")
        elif N == 3:
            print("2 abb", end="")
        elif N == 4:
            print("2 aabb", end="")
        elif N == 5:
            print("3 aabbb", end="")
        elif N == 6:
            print("3 aababb", end="")
        elif N == 7:
            print("3 aaababb", end="")
        elif N == 8:
            print("3 aaababbb", end="")
        else:
            q = N // 6
            r = N % 6
            s = "aababb"
            print("4", end=" ")
            for i in range(q):
                print(s, end="")
            for i in range(r):
                print(s[i], end="")
    else:
        q = N // 3
        r = N % 3
        s = "abc"
        print("1", end=" ")
        for i in range(q):
            print(s, end="")
        for i in range(r):
            print(s[i], end="")
 
 
# Inputs
N = 7
M = 2
 
# Function call
generate_string(N, M)


C#




using System;
public class GFG {
    // Main Method
    public static void Main(string[] args) {
        // Inputs
        int N = 7, M = 2;
 
        // Function call
        GenerateString(N, M);
    }
 
    // Method to generate appropriate string
    // following given conditions
    public static void GenerateString(int N, int M) {
        // Implementing the discussed approach
        if (M == 1) {
            Console.Write($"{N} ");
            for (int i = 0; i < N; i++)
                Console.Write("a");
        }
        else if (M == 2) {
            if (N == 1)
                Console.Write("1 a");
            else if (N == 2)
                Console.Write("1 ab");
            else if (N == 3)
                Console.Write("2 abb");
            else if (N == 4)
                Console.Write("2 aabb");
            else if (N == 5)
                Console.Write("3 aabbb");
            else if (N == 6)
                Console.Write("3 aababb");
            else if (N == 7)
                Console.Write("3 aaababb");
            else if (N == 8)
                Console.Write("3 aaababbb");
            else {
                int q = N / 6;
                int r = N % 6;
                string s = "aababb";
                Console.Write($"4 ");
                for (int i = 0; i < q; i++) {
                    Console.Write(s);
                }
                for (int i = 0; i < r; i++)
                    Console.Write(s[i]);
            }
        }
        else {
            int q = N / 3;
            int r = N % 3;
            string s = "abc";
            Console.Write("1 ");
            for (int i = 0; i < q; i++)
                Console.Write(s);
            for (int i = 0; i < r; i++)
                Console.Write(s[i]);
        }
    }
}


Javascript




// Method to generate appropriate string
// Following given conditions
function generateString(N, M) {
    // Implementing the discussed approach
    if (M === 1) {
        // Condition M = 1
        process.stdout.write(N + ' '); // Print the value of N followed by a space
        for (let i = 0; i < N; i++) {
            process.stdout.write('a'); // Print 'a' N times
        }
    } else if (M === 2) {
        // Condition M = 2
        if (N === 1) {
            // Subcondition N = 1
            process.stdout.write('1 a'); // Print '1 a'
        } else if (N === 2) {
            // Subcondition N = 2
            process.stdout.write('1 ab'); // Print '1 ab'
        } else if (N === 3) {
            // Subcondition N = 3
            process.stdout.write('2 abb'); // Print '2 abb'
        } else if (N === 4) {
            // Subcondition N = 4
            process.stdout.write('2 aabb'); // Print '2 aabb'
        } else if (N === 5) {
            // Subcondition N = 5
            process.stdout.write('3 aabbb'); // Print '3 aabbb'
        } else if (N === 6) {
            // Subcondition N = 6
            process.stdout.write('3 aababb'); // Print '3 aababb'
        } else if (N === 7) {
            // Subcondition N = 7
            process.stdout.write('3 aaababb'); // Print '3 aaababb'
        } else if (N === 8) {
            // Subcondition N = 8
            process.stdout.write('3 aaababbb'); // Print '3 aaababbb'
        } else {
            // Subcondition for N > 8
            const q = Math.floor(N / 6); // Calculate the quotient of N divided by 6
            const r = N % 6; // Calculate the remainder of N divided by 6
            const s = "aababb"; // Define the string 'aababb'
            process.stdout.write('4 '); // Print '4 '
            for (let i = 0; i < q; i++) {
                process.stdout.write(s); // Print 'aababb' q times
            }
            for (let i = 0; i < r; i++) {
                process.stdout.write(s[i]); // Print the first r characters of 'aababb'
            }
        }
    } else {
        // Condition M > 2
        const q = Math.floor(N / 3); // Calculate the quotient of N divided by 3
        const r = N % 3; // Calculate the remainder of N divided by 3
        const s = "abc"; // Define the string 'abc'
        process.stdout.write('1 '); // Print '1 '
        for (let i = 0; i < q; i++) {
            process.stdout.write(s); // Print 'abc' q times
        }
        for (let i = 0; i < r; i++) {
            process.stdout.write(s[i]); // Print the first r characters of 'abc'
        }
    }
}
 
// Inputs
const N = 7;
const M = 2;
 
// Function call
generateString(N, M);


Output

3 aaababb

Time Complexity: O(N/6) ~ O(N)
Auxiliary Space: O(1)



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads