华为机试题:判断一个数字中是否包含两个相同的子串

描述:
判断给定的一个数字,把它当成字符串以后,该字符串中是否包含相同的两个子串,子串的长度要求大于等于2。
比如:12123,该数字包含两个“12”子串;
又比如:1223122,该数字包含两个“122”子串。

运行时间限制: 无限制
内存限制: 无限制
输入:
待判断的正整型数字,最大长度为9。
输出:
0:不包含;
1:包含。

样例输入:
12123
样例输出:
1

我的答案(Java):

import java.util.Scanner;

public class Main{
    private String data;
    /**
     * 输入
     */
    public void input(){
        Scanner sc=new Scanner(System.in);
        data=sc.nextLine();// 读取一行
        sc.close();
        // 判断输入是否合法
        if(data!=null&&data.length()>9){
            data=null;
            return;
        }
        final int len=data.length();
        for(int i=0;i<len;i++){
            char ch=data.charAt(i);
            if(ch<'1'||ch>'9'){
                data=null;
                return;
            }
        }
    }
    /**
     * 寻找子串,只需要寻找长度为2的子串,长度大于2的子串肯定包含长度为2的子串
     */
    public void search(){
        if(data==null){
            return;
        }
        String s=null;
        int i=0;
        final int len=data.length();
        while(i<len-1){
            s=data.substring(i, i+2);// 截取长度为2的子串
            if(data.lastIndexOf(s)!=i){
                System.out.println("1");
                return;
            }
            i++;
        }
        System.out.println("0");
    }
    public static void main(String[] args){
        Main m=new Main();
        m.input();
        m.search();
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值