Дефангинг ИП Аддресс Леетцоде решење


Ниво тешкоће Лако
Често питани у амазонка
низ СтрингБуффер

Изјава о проблему

У овом проблему добијамо ИП адресу. Само је морамо претворити у дефангед ИП адресу, тј. У наш излазни низ, све „.“ претварају се у „[.]“.

Дефангинг ИП Аддресс Леетцоде решење

Пример

#КСНУМКС:

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

#КСНУМКС:

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

Приступ 1 (Коришћење Стринг Стреам / Буилдер-а)

За овај проблем можемо користити једноставни ток низа или класу градитеља за модификовање датог низа.
Можемо користити а градитељ жица (у случају Јава-е) и ток низа (у случају Ц ++) за претварање датог низа у излазни низ.
Прелазит ћемо кроз улазни низ слијева удесно. Ако је било који знак '.' онда ћемо додати „[.]“ у излазни низ. У супротном ћемо једноставно додати знак и у излазни низ.

Алгоритам

  • Направите празан ток низа или градитељ.
  • Покрените фор петљу да бисте прешли сваки знак датог низа.
  • За сваки знак у низу. Ако је знак '. ” затим додајте „[.]“ у градитељ низова. Иначе додају исти знак градитељу низова.
  • Претворите ток / градитељ у низ и вратите га.

Имплементација за дефанговање решења са ИП адресним кодом

Програм Ц ++

#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

Анализа сложености за дефинисање решења са ИП адресним кодом

Сложеност времена

На) : ми линеарно прелазимо датим низом, па је то О (н).

Сложеност простора 

На) : У случају јаве користили смо градитељ низова који је линеарни додатни простор, а у случају Ц ++ користили смо ток низа, тако да је сложеност простора О (н).

Приступ 2 (Коришћење уграђене функције)

Користићемо функцију замене регуларног израза у Ц ++ и заменити све функције у јави:

Можемо да користимо регек_реплаце функцију Ц ++ да заменимо све „.“ до "[.]".
Такође, у случају јаве, можемо користити функцију реплацеАлл () да заменимо све „.“ до "[.]".

Имплементација за дефанговање решења са ИП адресним кодом

Програм Ц ++

#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

Анализа сложености за дефинисање решења са ИП адресним кодом

Сложеност времена

Сложеност времена зависиће од интерне примене унапред дефинисаних функција.

Сложеност простора 

Сложеност простора такође ће зависити од интерне примене унапред дефинисаних функција.