题解 | #合法IP#
合法IP
https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while (null != (s = br.readLine())) {
int pointNum = 0;
if (s.length() > 15) {
System.out.println("NO");
return;
} else {
if (s.startsWith(".") || s.endsWith(".")){
System.out.println("NO");
return;
}
int start = -1;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '.' || i == s.length() - 1) {
if (s.charAt(i) == '.') pointNum++;
if (i == s.length() - 1) i++;
if (isValid(s, start + 1, i - 1) && pointNum <= 3) {
start = i;
} else {
System.out.println("NO");
return;
}
}
}
}
if (pointNum == 3){
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
// 判断字符是否合法
public static boolean isValid(String s, int start, int end) {
if (s.charAt(start) == '0' && start != end || start > end) {
return false;
}
int num = 0;
for (int i = start; i <= end; i++) {
if (s.charAt(i) < '0' || s.charAt(i) > '9') return false;
num = num * 10 + s.charAt(i) - '0';
}
if (num > 255) {
return false;
}
return true;
}
}
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while (null != (s = br.readLine())) {
int pointNum = 0;
if (s.length() > 15) {
System.out.println("NO");
return;
} else {
if (s.startsWith(".") || s.endsWith(".")){
System.out.println("NO");
return;
}
int start = -1;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '.' || i == s.length() - 1) {
if (s.charAt(i) == '.') pointNum++;
if (i == s.length() - 1) i++;
if (isValid(s, start + 1, i - 1) && pointNum <= 3) {
start = i;
} else {
System.out.println("NO");
return;
}
}
}
}
if (pointNum == 3){
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
// 判断字符是否合法
public static boolean isValid(String s, int start, int end) {
if (s.charAt(start) == '0' && start != end || start > end) {
return false;
}
int num = 0;
for (int i = start; i <= end; i++) {
if (s.charAt(i) < '0' || s.charAt(i) > '9') return false;
num = num * 10 + s.charAt(i) - '0';
}
if (num > 255) {
return false;
}
return true;
}
}