IP ලිපින ලීට්කෝඩ් විසඳුමක් ඉවත් කිරීම


දුෂ්කරතා මට්ටම පහසු
නිතර අසනු ලැබේ ඇමේසන්
String StringBuffer

ගැටළු ප්රකාශය

මෙම ගැටලුවේදී අපට IP ලිපිනයක් ලබා දී ඇත. අපට එය අපිරිසිදු IP ලිපිනයක් බවට පරිවර්තනය කළ යුතුය, එනම් අපගේ ප්‍රතිදාන නූලෙහි, සියලු “.” “[.]” බවට පරිවර්තනය වේ.

IP ලිපින ලීට්කෝඩ් විසඳුමක් ඉවත් කිරීම

උදාහරණයක්

#1:

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

#2:

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

ප්‍රවේශය 1 (නූල් ප්‍රවාහය / සාදන්නා භාවිතා කිරීම)

මෙම ගැටළුව සඳහා අපට දී ඇති නූල් වෙනස් කිරීම සඳහා සරල නූල් ප්‍රවාහයක් හෝ තනන්නා පන්තියක් භාවිතා කළ හැකිය.
අපට a භාවිතා කළ හැකිය නූල් සාදන්නා (ජාවා සම්බන්ධයෙන් නම්) සහ ලබා දුන් නූල ප්‍රතිදාන නූලට පරිවර්තනය කිරීම සඳහා නූල් ප්‍රවාහය (C ++ නම්).
අපි ආදාන නූල වමේ සිට දකුණට ගමන් කරන්නෙමු. කිසියම් චරිතයක් නම් '.' ඉන්පසුව, අපි “[.]” ප්‍රතිදාන නූලට එකතු කරමු. එසේ නොමැතිනම් අපි ප්‍රතිදානයෙහි අක්ෂර ද එකතු කරමු.

ඇල්ගොරිතම

  • හිස් නූල් ප්‍රවාහයක් හෝ සාදන්නෙකු සාදන්න.
  • දී ඇති නූල් වල එක් එක් අක්ෂර හරහා ගමන් කිරීම සඳහා ලූපයක් සඳහා ධාවනය කරන්න.
  • සෑම අක්ෂරයක් සඳහාම. චරිතය නම් '. " ඉන්පසු “[.]” එකතු කරන්න. වෙනත් ආකාරයකින් එකම චරිතය නූල් සාදන්නාට එකතු කරන්න.
  • ධාරාව / සාදන්නා නූල් බවට පරිවර්තනය කර එය ආපසු ලබා දෙන්න.

IP ලිපින ලීට්කෝඩ් විසඳුමක් ඉවත් කිරීම සඳහා ක්‍රියාත්මක කිරීම

සී ++ වැඩසටහන

#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 ලිපින ලීට්කෝඩ් විසඳුමක් ඉවත් කිරීම සඳහා සංකීර්ණ විශ්ලේෂණය

කාල සංකීර්ණත්වය

මත) : අපි දී ඇති නූල් රේඛීයව ගමන් කරන්නෙමු, මේ අනුව එය O (n) වේ.

අභ්‍යවකාශ සංකීර්ණතාව 

මත) : ජාවා සම්බන්ධයෙන් අප භාවිතා කර ඇත්තේ රේඛීය අමතර ඉඩක් වන නූල් සාදන්නෙකු වන අතර C ++ සම්බන්ධයෙන් අපි නූල් ප්‍රවාහය භාවිතා කර ඇති බැවින් අවකාශයේ සංකීර්ණතාව O (n) වේ.

ප්‍රවේශය 2 (සාදන ලද ශ්‍රිතය භාවිතා කිරීම)

අපි C ++ හි රීජෙක්ස් ප්‍රතිස්ථාපන ශ්‍රිතය භාවිතා කර ජාවා හි සියලුම ශ්‍රිත ප්‍රතිස්ථාපනය කරමු:

සියලුම “.” වෙනුවට අපට C ++ හි regex_replace ශ්‍රිතය භාවිතා කළ හැකිය. වෙත "[.]".
එසේම, ජාවා සම්බන්ධයෙන්, අපට “.” සියල්ල ප්‍රතිස්ථාපනය කිරීමට replaceAll () ශ්‍රිතය භාවිතා කළ හැකිය. වෙත "[.]".

IP ලිපින ලීට්කෝඩ් විසඳුමක් ඉවත් කිරීම සඳහා ක්‍රියාත්මක කිරීම

සී ++ වැඩසටහන

#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 ලිපින ලීට්කෝඩ් විසඳුමක් ඉවත් කිරීම සඳහා සංකීර්ණ විශ්ලේෂණය

කාල සංකීර්ණත්වය

කාල සංකීර්ණත්වය රඳා පවතින්නේ කලින් නිර්වචනය කරන ලද කාර්යයන් අභ්‍යන්තරව ක්‍රියාත්මක කිරීම මත ය.

අභ්‍යවකාශ සංකීර්ණතාව 

අභ්‍යවකාශ සංකීර්ණතාව ද කලින් නිර්වචනය කරන ලද කාර්යයන් අභ්‍යන්තරව ක්‍රියාත්මක කිරීම මත රඳා පවතී.