题目描述:
判断给定的一个数字,把它当成字符串以后,该字符串中是否包含相同的两个子串,子串的长度要求大于等于2。
比如:12123,该数字包含两个“12”子串;
又比如:1223122,该数字包含两个“122”子串。
输入:
待判断的正整型数字,最大长度为9。
输出:
0:不包含;
1:包含。
样例输入:
12123
样例输出:
1
代码实现:
import java.util.Scanner;
/**
*判断给定的一个数字,把它当成字符串以后,该字符串中是否包含相同的两个子串,子串的长度要求大于等于2。
*比如:12123,该数字包含两个“12”子串;又比如:1223122,该数字包含两个“122”子串。
*
*/
public class SameSubString {
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
long num;
while(cin.hasNext()){
num=cin.nextLong();
if(!valid(num))
return;
if(hasSameSubStr(num))
System.out.println(1);
else
System.out.println(0);
}
}
private static boolean hasSameSubStr(long num) {
String str=String.valueOf(num);
int length=str.length();
int maxSubStrLength=length>>1;//最大字串长度
int end=length-maxSubStrLength;//子串位置结束点
for (int j = 0; j <= end; j++) {
String sub=str.substring(j, j+maxSubStrLength);
String nextStr=str.substring(j+1, length);//除去起始位置的字串
if(nextStr.contains(sub))
return true;
}
return false;
}
private static boolean valid(long num) {
if(num<=0)
return false;
String str=String.valueOf(num);
if(str.length()<4||str.length()>9)
return false;
return true;
}
}