Table of Contents
Problem Statement
In this problem, we are given an IP Address. We just have to convert it into a Defanged IP Address i.e. in our output string, all the “.” are converted to “[.]”.
Example
#1:
address = "1.1.1.1"
"1[.]1[.]1[.]1"
#2:
address = "255.100.50.0"
"255[.]100[.]50[.]0"
Approach 1 (Using String Stream/Builder)
For this problem we can use simple string stream or builder class to modify the given string.
We can use a string builder (in case of java) and string stream (in case of C++) to convert given string to output string.
We will traverse the input string from left to right. If any character is ‘.’ then, we will append “[.]” in output string. Otherwise we will simply append the character in output string too.
Algorithm
- Create an empty string stream or builder.
- Run a for loop to traverse each character of given string.
- For each character in string. If character is ‘.” then append “[.]” to string builder. Else append the same character to string builder.
- Convert the stream/builder to string and return it.
Implementation for Defanging an IP Address Leetcode Solution
C++ Program
#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 Program
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
Complexity Analysis for Defanging an IP Address Leetcode Solution
Time Complexity
O(n) : we are traversing the given string linearly, Thus it’s O(n).
Space Complexity
O(n) : In case of java we have used string builder which is linear extra space and in case of C++ we have used string stream thus space complexity is O(n).
Approach 2 (Using In-built Function)
We will use regex replace function in C++ and replace all function in java:
We can use regex_replace function of C++ to replace all “.” to “[.]”.
Also, in case of java, we can use replaceAll() function to replace all “.” to “[.]”.
Implementation for Defanging an IP Address Leetcode Solution
C++ Program
#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 Program
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
Complexity Analysis for Defanging an IP Address Leetcode Solution
Time Complexity
Time complexity will depend upon the internal implementation of the pre-defined functions.
Space Complexity
Space complexity will also depend upon the internal implementation of the pre-defined functions.