阿里2017实习机试题——纯数字字符串恢复到非私有网段地址组合
来源:互联网 发布:手机扣字软件 编辑:程序博客网 时间:2024/06/10 04:31
题目:
给定一组只包含数字的字符串,请恢复到有效的非私有网段地址组合。私有IP地址范围:
A类:10.0.0.0--10.255.255.255
B类:172.16.0.0--172.31.255.255
C类:192.168.0.0--192.168.255.255
类似于LeetCode 93题:Restore IP Addresses
采用的是比较暴力的方法。
将数字字符串分割成4段,合法IP为:每一段长度为1-3,数字范围0-255,某一段以0开头则必须为0,不能是00或000。
采用投机取巧的方式将每一段数字字符串先转换成数字,这样就将00和000的情况都转换为了0,同时用数字区间[0,255]来验证每一段的合法性。
再添加“.”拼接成点分型的IP地址,如果拼接的新地址串与原数字串相比长度不是增加了3(3个点),说明分割的串中出现了00或000的情况,不合法,舍弃。
私有地址的判定采用正则表达式,由于之前已经判定了地址的合法性,不再判定地址本身是否合法。
import java.util.ArrayList;import java.util.Scanner;import java.util.regex.Pattern;public class Main { static String[] parseValidateIp(String inputStr) { Pattern patternA = Pattern.compile("10\\..*") ; Pattern patternB = Pattern.compile("172\\.((1[6-9])|(2[0-9])|(3[0-1]))\\..*") ; Pattern patternC = Pattern.compile("192\\.168\\..*") ; ArrayList<String> list = new ArrayList<String>(); for(int i = 1 ; i <= 3 ; i++){for(int j = 1 ; j <= 3 ; j++){for(int k = 1 ; k <= 3 ; k++){int m = inputStr.length() - (i + j + k);if( m > 0 && m <= 3){StringBuffer sb = new StringBuffer();int addr1 = Integer.parseInt(inputStr.substring(0, i));int addr2 = Integer.parseInt(inputStr.substring(i, i+j));int addr3 = Integer.parseInt(inputStr.substring(i+j, i+j+k));int addr4 = Integer.parseInt(inputStr.substring(i+j+k));if(addr1 <= 255 && addr2 <= 255 && addr3 <= 255 && addr4 <= 255){sb.append(addr1).append('.').append(addr2).append('.').append(addr3).append('.').append(addr4);if(sb.length() == inputStr.length() + 3){String ip = sb.toString();if(!(patternA.matcher(ip).matches()||patternB.matcher(ip).matches()||patternC.matcher(ip).matches())){list.add(ip);}}}}}}} String[] result = (String[]) list.toArray(new String[list.size()]); return result; } public static void main(String[] args){ Scanner in = new Scanner(System.in); String[] res; String _inputStr; try { _inputStr = in.nextLine(); } catch (Exception e) { _inputStr = null; } res = parseValidateIp(_inputStr); for(int res_i=0; res_i < res.length; res_i++) { System.out.println(String.valueOf(res[res_i])); } }}
0 0
- 阿里2017实习机试题——纯数字字符串恢复到非私有网段地址组合
- 【面试题】纯数字字符串加法
- 阿里实习生面试题
- 私有网段IP地址的划分
- 阿里实习—day one
- ip地址分类及各网段私有地址
- 2014阿里实习生面试题——mysql如何实现索引的
- 2014阿里实习生面试题——mysql如何实现索引的.
- 2014阿里实习生面试题——mysql如何实现索引的
- 2014阿里实习生面试题——mysql如何实现索引的
- 纯数字字符串判定
- 华为机试——字符串到数字的转换
- Asp检测字符串是否为纯字母和数字组合函数
- 2014阿里实习生面试题——哈希的原理和java中hashmap如何实现的
- 判断字符串是不是纯数字
- LeetCode—String数字字符串中寻找ip地址
- 【计算机网络常见面试题】ip地址同一网段计算问题
- 阿里实习 2017/5/4
- Lock和synchronized比较详解
- javaweb分布式_zookeeper
- linux中级命令
- 一次生产事故的优化经历
- AlarmManager详解
- 阿里2017实习机试题——纯数字字符串恢复到非私有网段地址组合
- ubuntu16.04下apache2如何配置CGI
- java methodhandle--反射升级版方法句柄demo
- 设计模式笔记十二:享元模式 | 更新版
- Symmetric Tree
- ffmpeg端口被占用
- 算法第二周作业03
- 100多个基础常用JS函数和语法集合大全
- selenium中chrome浏览器的使用_09