សិលាចារឹកអប្បបរមាដើម្បីបង្កើតជាក្រានិចមួយដែលមានការអនុញ្ញាត  


កម្រិតលំបាក មធ្យម
សួរញឹកញាប់ ក្រុមហ៊ុន Amazon លេខកូដ Directi ក្រុមហ៊ុន google ជា​ការ​ពិត វិចារណញាណ
ការសរសេរកម្មវិធីឌីណាមិក ខ្សែអក្សរ

បញ្ហា“ សិលាចារឹកអប្បបរមាដើម្បីបង្កើតជាក្រានីញ៉ានដែលមានការអនុញ្ញាត” បញ្ជាក់ថាអ្នកត្រូវបានគេផ្តល់ខ្សែអក្សរដែលមានអក្សរទាំងអស់នៅក្នុងអក្សរតូច។ សេចក្តីថ្លែងការណ៍បញ្ហាស្នើឱ្យរកការបញ្ចូលអប្បបរមានៃតួអក្សរទៅខ្សែអក្សរដែលវាអាចក្លាយទៅជាផាលីនដិន។ ទីតាំងរបស់តួអក្សរអាចត្រូវបានផ្លាស់ប្តូរជាខ្សែអក្សរ។

ឧទាហរណ៍  

សិលាចារឹកអប្បបរមាដើម្បីបង្កើតជាក្រានិចមួយដែលមានការអនុញ្ញាតពិន

malyalam
1

ការពន្យល់

ប្រសិនបើយើងអាចបន្ថែម 'a' ទៅខ្សែអក្សរដំបូងយើងអាចបង្កើតជាក្រាហ្វិនថល។

madaam
1

ការពន្យល់

បន្ថែមទាំង 'd' ឬ 'a' ដើម្បីបង្កើតជាខ្សែអក្សរដើម។

ក្បួនដោះស្រាយ  

  1. កំណត់ប្រវែងខ្សែអក្សរទៅ l និងលទ្ធផលដល់ ០ ។
  2. ប្រកាសមួយ integer អារេ.
  3. រក្សាទុកនិងរក្សាចំនួនតួអក្សរនីមួយៗនៅក្នុងខ្សែអក្សរ។
  4. ឆ្លងកាត់អារេដែលចាប់ផ្តើមពីលេខ ០ ដល់ខណះពេលដែលខ្ញុំ <២៦ ។
    1. ពិនិត្យមើលថាតើ countChar [ខ្ញុំ] % 2 == ១,
      1. ប្រសិនបើពិតបន្ទាប់មកធ្វើលទ្ធផល ++ ។
  5. ប្រសិនបើលទ្ធផលស្មើនឹង ០ បន្ទាប់មកត្រឡប់ ០ វិញ។
  6. លទ្ធផលត្រលប់មកវិញ -១ ។

ការពន្យល់

អ្នកត្រូវបានផ្តល់ឱ្យ ខ្សែអក្សរ, ភារកិច្ចរបស់អ្នកដែលបានផ្តល់គឺដើម្បីស្វែងរកការបញ្ចូលអប្បបរមាដែលត្រូវធ្វើនៅក្នុងខ្សែមួយដូច្នេះវាក្លាយជា Palindrome ។ ទីតាំងរបស់តួអក្សរអាចត្រូវបានផ្លាស់ប្តូរជាខ្សែអក្សរ។ យើងនឹងរាប់ការកើតឡើងនៃតួអក្សរនៃខ្សែអក្សរហើយរក្សាទុកវាទៅអារេមួយ។ ដោយសារតែគំនិតនៅខាងក្រោយនោះគឺថានៅពេលខ្សែអក្សរមានរាងដូចកញ្ចក់មានតែតួអក្សរមួយគត់ដែលអាចសេសនៅពេលប្រវែងខ្សែអក្សរសេស។ ក្រៅពីនេះតួអង្គទាំងអស់មានប្រេកង់។ ដូច្នេះយើងត្រូវរកតួអក្សរដែលកើតឡើងចំនួនសេស។

សូម​មើល​ផង​ដែរ
ល្បែងថ្មទី ២ Leetcode

យើងនឹងរាប់តួអក្សរទាំងអស់នៅក្នុងខ្សែបញ្ចូលហើយរក្សាទុកវាទៅអារេមួយ។ ដូចដែលយើងបាននិយាយរួចមកហើយខ្សែអក្សរមួយដែលមានរាងដូចក្រានីញអាចមានតែតួអក្សរមួយដែលកើតឡើងចំនួនសេស។ ដូច្នេះលទ្ធផលនឹងតិចជាងចំនួនតួអក្សរ។ បន្ទាប់ពីរក្សាទុករាល់តួអក្សរដែលកើតឡើងនៅក្នុងអារេមួយ។ យើងកំពុងបង្កើតអារេឆ្លងកាត់ពី i = ០ ដល់ i តិចជាង ២៦។ នេះគឺដោយសារតែវាមានចំនួនសរុប ២៦ តួអក្សរហើយយើងគួរតែសន្មតថានឹងមានប្រូបាប៊ីលីតេនៃការកើតឡើងនៃ ២៦ តួអក្សរនៅក្នុងខ្សែដែលបានផ្តល់។

ខណៈពេលកំពុងឆ្លងកាត់អារេយើងនឹងពិនិត្យមើលថាតើការបែងចែកចំនួននីមួយៗដោយ ២ ទុកនៅសល់ ១ ប្រសិនបើជាការពិតបន្ទាប់មកវានឹងបង្កើនចំនួនលទ្ធផលនៃ ១ (លទ្ធផល ++) ។ បន្ទាប់ពីឆ្លងកាត់អារេមួយប្រសិនបើចំនួននៅតែជាលេខសូន្យមានន័យថាយើងរកមិនឃើញតួអក្សរណាដែលសេសមានន័យថាខ្សែអក្សរមានពន្លឺរួចហើយយើងនឹងត្រឡប់ ០ ទៀតយើងនឹងត្រឡប់ (លទ្ធផល -១) ដូចដែលយើងបានលើកឡើងរួចហើយលទ្ធផលនឹងតិចជាងមួយ រាប់តួរលេខដូច្នេះយើងទទួលបានលទ្ធផល។

លេខកូដ  

លេខកូដ C ++ ដើម្បីស្វែងរកសិលាចារឹកអប្បបរមាដើម្បីបង្កើតជាក្រានិចមួយដែលមានការអនុញ្ញាត

#include<iostream>

using namespace std;

int getMinimumInsertion(string str)
{
    int l = str.length(),output = 0;

    int countChar[26] = { 0 };
    for (int i = 0; i < l; i++)
        countChar[str[i] - 'a']++;

    for (int i = 0; i < 26; i++)
        if (countChar[i] % 2 == 1)
            output++;

    return (output == 0) ? 0 : output - 1;
}
int main()
{
    string str = "malyalam";
    cout << getMinimumInsertion(str);

    return 0;
}
1

កូដចាវ៉ាដើម្បីស្វែងរកសិលាចារឹកអប្បបរមាដើម្បីបង្កើតជាក្តារក្រូមេនដែលមានការអនុញ្ញាត

class insertionToPalindrome
{
    public static int getMinimumInsertion(String str)
    {
        int l = str.length(),output = 0;

        int countChar[] = new int[26];

        for (int i = 0; i < l; i++)
            countChar[str.charAt(i) - 'a']++;

        for (int i = 0; i < 26; i++)
        {
            if (countChar[i] % 2 == 1)
                output++;
        }

        return (output == 0) ? 0 : output - 1;
    }
    public static void main(String[] args)
    {
        String str = "malyalam";
        System.out.println(getMinimumInsertion(str));
    }
}
1

ការវិភាគស្មុគស្មាញ  

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

អូរ (n) ដែលជាកន្លែងដែល “ n” គឺជាចំនួនតួអក្សរនៅក្នុងខ្សែអក្សរបញ្ចូល។

សូម​មើល​ផង​ដែរ
រកលេខកំពូល K (ឬញឹកញាប់បំផុត) នៅក្នុងស្ទ្រីម

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

ឱ (១), ពីព្រោះយើងបានបង្កើតអារេបន្ថែមដែលមានទំហំថេរ។ ដូច្នេះភាពស្មុគស្មាញនៃលំហគឺថេរ។