បង្កើតខ្សែអក្សរដែលមានតួអក្សរដែលមានចំនួនសេសនៃដំណោះស្រាយ Leetcode


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ ឌីឌី
ខ្សែអក្សរ

សេចក្តីថ្លែងការណ៍បញ្ហា។

នៅក្នុងបញ្ហានេះយើងត្រូវបានផ្តល់ប្រវែង។ យើងត្រូវបង្កើតក ខ្សែអក្សរ ដែលមានតួអក្សរទាំងអស់ចំនួនសេសនៃដង។ ឧទាហរណ៍អាបាបាគឺជាខ្សែអក្សរត្រឹមត្រូវព្រោះរាប់ (ក) = ៥ និងរាប់ (ខ) = ១ ។
ប៉ុន្តែ aaabbc មិនមែនជាខ្សែអក្សរត្រឹមត្រូវនៅទីនេះទេពីព្រោះរាប់ (ខ) = ២ ដែលជាចំនួនគូ។

ឧទាហរណ៍

n = 4
"pppz"

ការពន្យល់:

“ pppz” គឺជាខ្សែអក្សរត្រឹមត្រូវចាប់តាំងពីតួអក្សរ 'p' កើតឡើងបីដងហើយតួអក្សរ 'z' កើតឡើងម្តង។ ចំណាំថាមានខ្សែអក្សរត្រឹមត្រូវជាច្រើនទៀតដូចជា“ អូហូ” និង“ ស្នេហា” ។

n = 2
"xy"

ការពន្យល់:

“ xy” គឺជាខ្សែអក្សរត្រឹមត្រូវព្រោះថាតួអក្សរ 'x' និង 'y' កើតឡើងម្តង។ ចំណាំថាមានខ្សែអក្សរត្រឹមត្រូវជាច្រើនទៀតដូចជា“ ag” និង“ ur” ។

វិធីសាស្រ្ត

យើងអាចប្រើល្បិចនៅទីនេះ។
ប្រសិនបើប្រវែងនៃខ្សែអក្សរគឺជាលេខសេសនោះយើងអាចប្រើតួអក្សរតែមួយដើម្បីបង្កើត ខ្សែអក្សរហើយប្រសិនបើប្រវែងបញ្ចូលជាលេខគូនោះយើងអាចបង្កើតខ្សែអក្សរមួយដែលមានពីរតួអក្សរ។
តួអក្សរមួយកើតឡើង -១ ដង (ដែលនឹងជាលេខសេសពីព្រោះ n នៅទីនេះ) និងតួអក្សរដកស្រង់គ្រាន់តែមួយដង (ដែលជាការរាប់ចំនួនសេស) ។

ឧទាហរណ៍ n = 4 លទ្ធផលរបស់យើងនឹងត្រូវបាន aaab
ហើយប្រសិនបើ n = 3 លទ្ធផលរបស់យើងនឹងត្រូវបានធ្វើ

បង្កើតខ្សែអក្សរដែលមានតួអក្សរដែលមានចំនួនសេសនៃដំណោះស្រាយ Leetcode
យើងទើបតែប្រើតួអក្សរ a និង b នៅក្នុងដំណោះស្រាយរបស់យើងមានជំរើសជាច្រើនទៀតនៃតួអក្សរប្រសិនបើអ្នកចង់បាន។

ការអនុវត្តន៍

កម្មវិធី C ++ សម្រាប់បង្កើតខ្សែអក្សរជាមួយនឹងតួអក្សរដែលមានចំនួនសេសឡេឡេលេខកូដដំណោះស្រាយ

#include <bits/stdc++.h>
using namespace std;

string generateTheString(int n) 
{
    string str;
    if(n%2==0)
    {
        for(int i=0;i<n-1;i++)  str.push_back('a');
        str.push_back('b');
    }
    else
    {
        for(int i=0;i<n;i++)  str.push_back('a');
    }
    return str;
}

int main() 
{
    int n=5;
    cout<<  generateTheString(n)   << endl;
    return 0; 
}
aaaaa

ចាវ៉ាកម្មវិធីសម្រាប់បង្កើតខ្សែអក្សរដែលមានតួអក្សរដែលមានចំនួនសេសដំណោះស្រាយឡេឡេលេខកូដ

class Rextester 
{
    public static String generateTheString(int n) 
    {
        StringBuilder sb=new StringBuilder();

        if(n%2==0)
        {
            for(int i=0;i<n-1;i++)sb.append('a');
            sb.append('b');
        }
        else
        {
            for(int i=0;i<n;i++)sb.append('a');
        }

        return sb.toString();
    }

    public static void main(String[]args)
    {
        int length=5;
        System.out.println(generateTheString(length));
    }
}
aaaaa

ការវិភាគស្មុគស្មាញសម្រាប់បង្កើតខ្សែអក្សរមួយដែលមានចំនួនលេខសេសដំណោះស្រាយឡេឡេលេខកូដ

ស្មុគស្មាញពេលវេលា

O (n)៖ យើងកំពុងតំរែតំរង់លីនេអ៊ែរសម្រាប់ប្រវែងដែលបានផ្តល់ឱ្យតែមួយដងប៉ុណ្ណោះ។ ដូច្ន្រះពេលវេលាសមកាលនឹងជា O (n) ។

ភាពស្មុគស្មាញនៃលំហ 

O (n)៖ យើងកំពុងបង្កើតខ្សែសង្វាក់លទ្ធផលរបស់យើងដូច្នេះយើងកំពុងប្រើទំហំបន្ថែមដែលមានប្រវែង។ ដូច្នេះភាពស្មុគស្មាញនៃលំហរគឺ O (n) ។