Дефиниране на IP адрес Leetcode решение


Ниво на трудност Лесно
Често задавани в Амазонка
Низ StringBuffer

Декларация за проблема

В този проблем ни се дава IP адрес. Просто трябва да го преобразуваме в защитен IP адрес, т.е. в нашия изходен низ, всички „.“ се преобразуват в „[.]“.

Дефиниране на IP адрес Leetcode решение

Пример

# 1:

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

# 2:

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

Подход 1 (Използване на String Stream / Builder)

За този проблем можем да използваме прост поток от низове или клас на конструктор, за да модифицираме дадения низ.
Можем да използваме a конструктор на низове (в случай на java) и поток от низове (в случай на C ++) за преобразуване на даден низ в изходен низ.
Ще преминем през входния низ отляво надясно. Ако някой символ е „.“ след това ще добавим „[.]“ в изходния низ. В противен случай просто ще добавим символа и в изходния низ.

алгоритъм

  • Създайте празен поток от низове или конструктор.
  • Изпълнете цикъл for, за да пресечете всеки символ от даден низ.
  • За всеки символ в низ. Ако знакът е '. " след това добавете „[.]“ към конструктора на низове. В противен случай добавете същия символ към конструктора на низове.
  • Преобразувайте потока / конструктора в низ и го върнете.

Внедряване за дефиниране на 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

Програма 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 адрес Leetcode

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

На) : обхождаме дадения низ линейно, така че е O (n).

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

На) : В случай на Java сме използвали конструктор на низове, който е линейно допълнително пространство, а в случай на C ++ сме използвали поток на низове, поради което сложността на пространството е O (n).

Подход 2 (Използване на вградена функция)

Ще използваме функцията за заместване на регулярни изрази в C ++ и ще заменим всички функции в Java:

Можем да използваме функцията regex_replace на C ++, за да заменим всички “.” да се "[.]".
Също така, в случай на java, можем да използваме функцията replaceAll (), за да заменим всички “.” да се "[.]".

Внедряване за дефиниране на 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

Програма 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 адрес Leetcode

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

Сложността във времето ще зависи от вътрешното изпълнение на предварително дефинираните функции.

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

Сложността на пространството също ще зависи от вътрешното изпълнение на предварително дефинираните функции.