java 字符串中快速查找对应的字符

碰到一个面试,快速的查找字符串的某个字符第一次出现的位置,还不能直接的使用用java现有indexof等方法

String input = "allaaaa";

String query = "ll";

现有的方法:

1、indexof

return input.indexOf(query);

2、split

String[] s = input.split(query);
if (s.length > 1) {// 说明有 如果等于1 说明没有
    return s[0].length();
}

3、正则匹配

Matcher matcher = Pattern.compile(query).matcher(input);
if (matcher.find()) {
    return matcher.start();
}

以上的方法都不能用

思考了一下,这个面试题不是拐着弯问indexof的内部实现么?

真是。。。

思路就是把两个String 变成char[],然后一个一个的对比,并记录匹配的次数,如果匹配的次数等于查找字符串的长度就停止检索,不相等就清空匹配测试

        char[] inputArray = input.toCharArray();
        char[] queryArray = query.toCharArray();

        int inputLength = input.length();
        int queryLength = query.length();

        int inputIndex = 0;
        int queryIndex = 0;

        if (queryLength > inputLength) {
            return -1;
        }

        while (inputIndex < (inputLength - queryLength)) {
            if (inputArray[inputIndex] == queryArray[queryIndex]) {
                inputIndex ++;
                queryIndex ++;
            } else {
                inputIndex ++;
                queryIndex = 0;
            }

            if (queryIndex == queryLength) { // 说明找到了
                break;
            }
        }

        return queryIndex == queryLength ? (inputIndex - queryLength) : -1;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值