碰到一个面试,快速的查找字符串的某个字符第一次出现的位置,还不能直接的使用用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;