IP-мекен-жайдың шешім кодын өзгерту


Күрделілік дәрежесі оңай
Жиі кіреді Amazon
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 тәсіл (String Stream / Builder пайдалану)

Берілген жолды өзгерту үшін қарапайым жол ағыны немесе құрастырушы класын қолдана аламыз.
Біз а жол құрастырушы (java жағдайында) және жол ағыны (C ++ жағдайында) берілген жолды шығыс жолға түрлендіру үшін.
Біз енгізу жолын солдан оңға қарай өтеміз. Егер кез-келген таңба '' болса. содан кейін шығыс жолына “[.]” қосамыз. Әйтпесе, біз тек таңбаны шығыс жолға қосамыз.

Алгоритм

  • Бос жол ағыны немесе құрастырушы жасаңыз.
  • Берілген жолдың әр таңбасын өту үшін for for циклін іске қосыңыз.
  • Жолдағы әрбір таңба үшін. Егер таңба 'болса. » содан кейін «[.]» жолын құрастырушыға қосыңыз. Басқа жолды құрастырушыға бірдей таңбаны қосады.
  • Ағынды / құрастырушыны жолға айналдырып, оны қайтарыңыз.

IP-мекен-жайдың шешім кодын өзгертуге арналған шешім

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

Java бағдарламасы

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): біз берілген жолды сызық бойымен өтеміз, осылайша O (n) болады.

Ғарыштың күрделілігі 

O (n): Егер java болса, біз сызықтық қосымша кеңістікті құрайтын құрастырушыны қолдандық, ал C ++ жағдайда жолдық ағынды қолдандық, осылайша кеңістіктің қиындығы O (n) болады.

2-тәсіл (ішкі функцияны қолдану)

Біз C ++ тілінде regex ауыстыру функциясын қолданамыз және java-да барлық функцияны ауыстырамыз:

Біз барлық «» мәндерін ауыстыру үшін C ++ функциясының regex_replace функциясын қолдана аламыз. «[.]» дейін.
Сонымен қатар, java болған жағдайда, біз барлық «» ауыстыру үшін replaceAll () функциясын қолдана аламыз. «[.]» дейін.

IP-мекен-жайдың шешім кодын өзгертуге арналған шешім

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

Java бағдарламасы

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 мекенжайын өзгертуге арналған күрделіліктің анализі

Уақыттың күрделілігі

Уақыттың күрделілігі алдын-ала анықталған функцияларды ішкі іске асыруға байланысты болады.

Ғарыштың күрделілігі 

Ғарыштың күрделілігі алдын-ала анықталған функцияларды ішкі іске асыруға байланысты болады.