រារាំងដំណោះស្រាយអាស័យដ្ឋាន IP Leetcode


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ ក្រុមហ៊ុន Amazon
ខ្សែអក្សរ StringBuffer

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

នៅក្នុងបញ្ហានេះយើងត្រូវបានផ្តល់អាសយដ្ឋាន IP ។ យើងគ្រាន់តែត្រូវប្តូរវាទៅជាអាស័យដ្ឋានអាយផតដែលមិនដំណើរការពោលគឺនៅក្នុងខ្សែលទ្ធផលរបស់យើងទាំងអស់“ ។ ” ត្រូវបានប្តូរទៅជា“ [។ ]” ។

រារាំងដំណោះស្រាយអាស័យដ្ឋាន IP Leetcode

ឧទាហរណ៍

#1:

address = "1.1.1.1"
"1[.]1[.]1[.]1"

#2:

address = "255.100.50.0"
"255[.]100[.]50[.]0"

វិធីសាស្រ្ត ១ (ការប្រើប្រាស់ស្ទ្រីមខ្សែ / អ្នកសាងសង់)

ចំពោះបញ្ហានេះយើងអាចប្រើស្ទ្រីមខ្សែអក្សរសាមញ្ញឬថ្នាក់អ្នកសាងសង់ដើម្បីកែប្រែខ្សែអក្សរដែលបានផ្តល់ឱ្យ។
យើងអាចប្រើក អ្នកបង្កើតខ្សែអក្សរ (ក្នុងករណីជ្វា) និងចរន្តខ្សែអក្សរ (ក្នុងករណី C ++) ដើម្បីបម្លែងខ្សែអក្សរដែលបានផ្តល់ទៅជាខ្សែសង្វាក់លទ្ធផល។
យើងនឹងឆ្លងកាត់ខ្សែបញ្ចូលពីឆ្វេងទៅស្តាំ។ ប្រសិនបើមានតួអក្សរណាមួយគឺ '។ បន្ទាប់មកយើងនឹងបន្ថែម“ [។ ]” នៅក្នុងខ្សែអក្សរលទ្ធផល។ បើមិនដូច្នោះទេយើងនឹងបន្ថែមតួអក្សរនៅក្នុងឃ្លាលទ្ធផល។

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

  • បង្កើតស្ទ្រីមខ្សែអក្សរទទេឬអ្នកសាងសង់។
  • រត់រង្វិលជុំដើម្បីឆ្លងកាត់តួអក្សរនីមួយៗនៃខ្សែអក្សរដែលបានផ្តល់ឱ្យ។
  • សម្រាប់តួអក្សរនីមួយៗនៅក្នុងខ្សែអក្សរ។ ប្រសិនបើតួអក្សរគឺ។ " បន្ទាប់មកបន្ថែម“ [។ ]” ទៅអ្នកបង្កើតខ្សែអក្សរ។ អ្នកផ្សេងទៀតបន្ថែមតួអក្សរដូចគ្នាទៅនឹងអ្នកសាងសង់ខ្សែអក្សរ។
  • បំលែងស្ទ្រីម / អ្នកសាងសង់ទៅជាខ្សែអក្សរហើយបញ្ជូនវាមកវិញ។

ការអនុវត្តសម្រាប់ការបង្ខូចដំណោះស្រាយអាសយដ្ឋាន IP Leetcode

កម្មវិធី C ++

#include <iostream>
#include <sstream>
using namespace std;
string defangIPaddr(string address) 
{
    std::stringstream ss;

    for(int i=0;i<address.length();i++){
        if(address[i]=='.'){
            ss<<"[.]";//replacing . with [.]
        }else{
            ss<<address[i];
        }
    }
    return ss.str();
}

int main()
{
    cout << defangIPaddr("1.1.1.1");
}
1[.]1[.]1[.]1

កម្មវិធីចាវ៉ា

import java.util.*;
import java.lang.*;

class Solution
{  
    public static String defangIPaddr(String address) 
    {
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<address.length();i++){
            if(address.charAt(i)=='.'){
                sb.append("[.]");
            }else{
                sb.append(address.charAt(i));
            }
        }
        return sb.toString();
    }
    
    public static void main(String args[])
    {
        System.out.println(defangIPaddr("1.1.1.1"));
    }
}
1[.]1[.]1[.]1

ការវិភាគស្មុគស្មាញសម្រាប់ការការពារដំណោះស្រាយអាស័យដ្ឋាន IP Leetcode

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

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

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

O (n)៖ ក្នុងករណីជ្វាយើងបានប្រើអ្នកបង្កើតខ្សែដែលជាកន្លែងបន្ថែមលីនេអ៊ែរហើយក្នុងករណី C ++ យើងបានប្រើខ្សែអក្សរដូច្នេះភាពស្មុគស្មាញនៃលំហគឺ O (n) ។

វិធីសាស្រ្តទី ២ (ប្រើមុខងារដែលបង្កើតឡើង)

យើងនឹងប្រើមុខងារជំនួស regex នៅក្នុង C ++ ហើយជំនួសរាល់មុខងារទាំងអស់នៅក្នុងចាវ៉ាៈ

យើងអាចប្រើមុខងារ regex_replace នៃ C ++ ដើម្បីជំនួស“ ។ ” ទៅ“ [។ ]” ។
ក្នុងករណីជ្វាយើងអាចប្រើមុខងារជំនួស () ជំនួសមុខងារ“ ទាំងអស់” ។ ទៅ“ [។ ]” ។

ការអនុវត្តសម្រាប់ការបង្ខូចដំណោះស្រាយអាសយដ្ឋាន IP Leetcode

កម្មវិធី C ++

#include <iostream>
#include <regex>
using namespace std;
string defangIPaddr(string address) 
{
        return regex_replace(address, regex("[.]"), "[.]");
    //. is covered by [] from both sides because . itself works as pipe and will give wrong result if not used like [.] 
}

int main()
{
    cout << defangIPaddr("1.1.1.1");
}
1[.]1[.]1[.]1

កម្មវិធីចាវ៉ា

import java.util.*;
import java.lang.*;

class Solution
{  
    public static String defangIPaddr(String address) 
    {
        /*
        A period (.) has a special meaning there as does a pipe (|) as does a curly brace (}).       
        You need to escape them all using // before '.'.
        */
        return address.replaceAll("\\.","[.]");
    }
    
    public static void main(String args[])
    {
        System.out.println(defangIPaddr("1.1.1.1"));
    }
}
1[.]1[.]1[.]1

ការវិភាគស្មុគស្មាញសម្រាប់ការការពារដំណោះស្រាយអាស័យដ្ឋាន IP Leetcode

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

ភាពស្មុគស្មាញនៃពេលវេលានឹងអាស្រ័យលើការអនុវត្តផ្ទៃក្នុងនៃមុខងារដែលបានកំណត់ជាមុន។

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

ភាពស្មុគស្មាញនៃលំហក៏នឹងពឹងផ្អែកលើការអនុវត្តផ្ទៃក្នុងនៃមុខងារដែលបានកំណត់ជាមុន។