1108. IP 地址无效化
给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。
所谓无效化 IP 地址,其实就是用 “[.]“ 代替了每个 “.”。
示例 1:
输入:address = “1.1.1.1”
输出:”1[.]1[.]1[.]1”
示例 2:
输入:address = “255.100.50.0”
输出:”255[.]100[.]50[.]0”
提示:
给出的 address 是一个有效的 IPv4 地址
string成员函数replace较为弱小,稍加修改方便替换字符串
抽象图一二ij
class Solution {
public:
string defangIPaddr(string address) {
return replace(address,".","[.]");
}
string replace(string resourceStr,string subStr,string newStr){
int i=0;
while((i=resourceStr.find(subStr,i))!=-1){
resourceStr.replace(i,subStr.size(),newStr);
i+=newStr.size();
}
return resourceStr;
}
};
解题思路
这题太简单了,是在没啥写的,来个一题三解吧,两种调用 api,一种循环
/**
* @param {string} address
* @return {string}
*/
var defangIPaddr = function (address) {
let str = ''
for (let i = 0; i < address.length; i++) {
if (address[i] !== '.') {
str += address[i]
} else {
str += '[.]'
}
}
return str
};
C++字符串衔接
class Solution {
public:
string defangIPaddr(string address) {
string res="";
for(char& ch:address) {
if(ch=='.')
res+="[.]";
else
res+=ch;
}
return res;
}
};
java 最简单思路
class Solution {
public String defangIPaddr(String address) {
StringBuffer stringBuffer=new StringBuffer();
for(int i=0;i<address.length();i++){
if(address.charAt(i) == '.'){
stringBuffer.append("[.]");
}else{
stringBuffer.append(address.charAt(i));
}
}
return new String(stringBuffer);
}
}
Java三种解法,第三种双100%解决
直接使用 String 类的 replace。
class Solution {
public String defangIPaddr(String address) {
return address.replace(“.”, “[.]“);
}
}
使用 address 创建 StringBuilder,遍历,遇到 ‘.’ 使用 insert。
class Solution {
public String defangIPaddr(String address) {
StringBuilder s = new StringBuilder(address);
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ‘.’) {
s.insert(i + 1, ‘]‘);// 先插入后面,此时 i 下标仍是’.’
s.insert(i, ‘[‘);// 插入 ‘.’ 前面,此时 i 下标是’[‘ ,i+2 下标为’]‘
i += 3;// 故 i 直接加 3,为下一个字符,注意此时已经是原来 i+1 下标的字符了;
//此次循环结束进入下次循环还会进行加 1,不过又因为 ip 地址格式的原因,不会有连续的两个 ‘.’ 连着;
//所以这个位置绝不可能是 ‘.’,所以再加 1,也没问题。
}
}
return s.toString();
}
}
创建空的 Stringbuilder ,遍历 address 进行 append。
class Solution {
public String defangIPaddr(String address) {
StringBuilder s = new StringBuilder();
for (int i = 0; i < address.length(); i++) {
if (address.charAt(i) == ‘.’) {
//s.append(‘[‘);
//s.append(‘.’);
//s.append(‘]‘);
s.append(“[.]“);
} else {
s.append(address.charAt(i));
}
}
return s.toString();
}
}
c++超100的直接replace解法
class Solution {
public:
string defangIPaddr(string address) {
for (int i = 0; i < address.size(); ++i)
{
if (address[i] == '.')
{
address.replace(i, 1, "[.]");
// 这个i的偏移量需要+2
i += 2;
}
}
return address;
}
};
解题思路 利用有正则表达式功能的re模块,”.”在正则表达式中代表除换行符外任意字符,所以用反斜杠转义。
import re
class Solution:
def defangIPaddr(self, address: str) -> str:
return re.sub(‘\.’,’[.]‘,address)
解题思路
此题主要考察两个知识点
表层的知识点是简单的字符串替换
隐藏的知识点是考察了在字符串替换中可能需要用到的正则表达式,由于正则表达中 “.” 是一个特殊字符,所以在替换IP地址中的 “.” 时需要转义。除了 “.”,正则表达式中的特殊字符还有 “.$|()[{^?*+\“ 等等
解题思路
第一种方法,直接使用replace方法进行替换
第二方方法是对字符串挨个进行判断,如果是.就进行替换
class Solution:
def defangIPaddr(self, address: str) -> str:
return address.replace(“.”,”[.]“)
class Solution:
def defangIPaddr(self, address: str) -> str:
b = “”
for i in (address):
if i != “.”:
b = b+i
else:
b = b + “[.]“
return b
还没有评论,来说两句吧...