1108. IP 地址无效化

£神魔★判官ぃ 2023-10-04 18:53 71阅读 0赞

给你一个有效的 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

  1. class Solution {
  2. public:
  3. string defangIPaddr(string address) {
  4. return replace(address,".","[.]");
  5. }
  6. string replace(string resourceStr,string subStr,string newStr){
  7. int i=0;
  8. while((i=resourceStr.find(subStr,i))!=-1){
  9. resourceStr.replace(i,subStr.size(),newStr);
  10. i+=newStr.size();
  11. }
  12. return resourceStr;
  13. }
  14. };

解题思路

这题太简单了,是在没啥写的,来个一题三解吧,两种调用 api,一种循环

  1. /**
  2. * @param {string} address
  3. * @return {string}
  4. */
  5. var defangIPaddr = function (address) {
  6. let str = ''
  7. for (let i = 0; i < address.length; i++) {
  8. if (address[i] !== '.') {
  9. str += address[i]
  10. } else {
  11. str += '[.]'
  12. }
  13. }
  14. return str
  15. };

C++字符串衔接

  1. class Solution {
  2. public:
  3. string defangIPaddr(string address) {
  4. string res="";
  5. for(char& ch:address) {
  6. if(ch=='.')
  7. res+="[.]";
  8. else
  9. res+=ch;
  10. }
  11. return res;
  12. }
  13. };

java 最简单思路

  1. class Solution {
  2. public String defangIPaddr(String address) {
  3. StringBuffer stringBuffer=new StringBuffer();
  4. for(int i=0;i<address.length();i++){
  5. if(address.charAt(i) == '.'){
  6. stringBuffer.append("[.]");
  7. }else{
  8. stringBuffer.append(address.charAt(i));
  9. }
  10. }
  11. return new String(stringBuffer);
  12. }
  13. }

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解法

  1. class Solution {
  2. public:
  3. string defangIPaddr(string address) {
  4. for (int i = 0; i < address.size(); ++i)
  5. {
  6. if (address[i] == '.')
  7. {
  8. address.replace(i, 1, "[.]");
  9. // 这个i的偏移量需要+2
  10. i += 2;
  11. }
  12. }
  13. return address;
  14. }
  15. };

解题思路 利用有正则表达式功能的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

发表评论

表情:
评论列表 (有 0 条评论,71人围观)

还没有评论,来说两句吧...

相关阅读