2014-09-16 3 views
0

Я ищу проблему, которая просит вернуть число позиций, где две заданные строки содержат одну и ту же длину 2 подстроки. Итак, «xxcaazz» и «xxbaaz» дают 3, так как подстроки «xx», «aa» и «az» появляются в одном и том же месте в обеих строках. Решение считается следующее:Почему не исключение из-за пределов?

public int stringMatch(String a, String b) { 
    // Figure which string is shorter. 
    int len = Math.min(a.length(), b.length()); 
    int count = 0; 

    // Look at both substrings starting at i 
    for (int i=0; i<len-1; i++) { 
    String aSub = a.substring(i, i+2); 
    String bSub = b.substring(i, i+2); 
    if (aSub.equals(bSub)) { // Use .equals() with strings 
     count++; 
    } 
    } 

    return count; 
} 

Я не понимаю, почему нет из-за границы для исключения этого решения. Если, например, есть две строки, введенные с длиной 6 и 7 соответственно, в финальной итерации цикла for, i = 5. Но тогда для подстроки меньшей строки заданные параметры были бы (5,7), хотя конечный индекс строки равен 5. В предыдущих задачах я, похоже, вывел исключение за пределы в аналогичном случае. Почему не здесь? Вся помощь очень ценится.

+0

Отметьте свой вопрос, с какого языка вы используете - это будет началом. –

ответ

1

Если мы предположим, что вы кодируете на Java, в методе substring(int beginIndex, int endIndex), endIndex является эксклюзивным.

От http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#substring-int-int-:

Параметры:

beginIndex - индекс начала, включительно.

endIndex - конечный индекс, исключительный.

Итак, когда вы вызываете ваш последний абзац, i будет равен 4, потому что i<len-1 в состоянии for; так:

String bSub = b.substring(i, i+2); 

=> b.substring (4, 6) => xxba аз

Если вы хотите StringIndexOutOfBoundsException, удалить -1 в вашем for состоянии.

0

Как вы упоминали «В последней итерации цикла for, i = 5». На 5-й итерации i = 4 вы начинаете с 0-го индекса. Таким образом, выход

0> xx == xx 
1> xc == xb 
2> ca == ba 
3> aa == aa 
4> az == az 

Для функции подстроки второй параметр в эксклюзивном так подстроки (4,6) никогда не пытается прочитать индекс 6. Таким образом, программа не приводит к IndexOutOfBoundsException.

Смежные вопросы