Первоначально это была проблема, с которой я столкнулся на работе, но теперь это то, что я просто пытаюсь решить для своего любопытства.Найти числовые подстроки математически, без сравнения строк
Я хочу узнать, если int 'a' содержит int 'b' наиболее эффективным способом. Я написал какой-то код, но, похоже, неважно, что я пишу, анализируя его в строку, а затем используя indexOf в два раза быстрее, чем математически.
Память не является проблемой (в пределах разумного), просто чистая скорость обработки.
Это код, который я написал, чтобы сделать это математически:
private static int[] exponents = {10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
private static boolean findMatch(int a, int b) {
if (b > a) return false;
if (a == b) return true;
int needleLength = getLength(b);
int exponent = exponents[needleLength];
int subNum;
while (a >= 1) {
subNum = a % exponent;
if (subNum == b)
return true;
a /= 10;
}
return false;
}
private static int getLength(int b) {
int len = 0;
while (b >= 1) {
len++;
b /= 10;
}
return len;
}
Вот строковый метод я использую, который, кажется, козырной математический метод выше:
private static boolean findStringMatch(int a, int b) {
return String.valueOf(a).indexOf(String.valueOf(b)) != -1;
}
Так что, хотя мне действительно не нужно выполнять мою работу, мне просто интересно, может ли кто-нибудь подумать о том, чтобы еще больше оптимизировать мой способ сделать это математически или совершенно новый подход. Снова память не проблема, я просто стреляю по чистой скорости.
Мне очень интересно видеть или слышать что-либо, что может предложить любой человек.
EDIT: Когда я говорю, я имею в виду содержит может быть где угодно, так, например, findMatch (1234, 23) == истинный
EDIT: Для всех говорят, что это дерьмо не читается и не нужно: вам не хватает смысла. Дело в том, чтобы разобраться в интересной проблеме, а не придумать ответ, который будет использоваться в производственном коде.
Как написано, на ваш вопрос ответить невозможно. Обрежьте его до нужного места – 2008-10-23 23:26:03
его интереснее, что строковая версия выполняется быстрее, так как не toString числа должны делать аналогичные операции shift/mod/div, чтобы превратить число в его цифры? – 2008-10-24 18:17:21