Исправление:.
Ответ на Sachin Чаухана действительно правильно и лучше (т. е. используя двоичный поиск для поиска первой разницы).
Я оставлю свой ответ, чтобы обеспечить более простое время программиста-решения, для случаев, когда длина не имеет большого влияния (т. Е. Относительно короткие строки), но предпочтительным будет простое решение.
Вот оригинальный ответ:
Как это простой цикл, я сомневаюсь, что любой встроенный метод будет много «программиста» -time улучшения (и, безусловно, не так много времени выполнения повышения ценности для говоря).
Для записи я не знаю такого Java-метода (возможно, какой-то внешней библиотеки, но вы заявили, что предпочли бы избежать их).
Reference код будет что-то вдоль этих линий, я бы себе:
public int longestCommonPrefixLength(String s1, String s2) {
if (s1 == null || s1.length() == 0 || s2 == null || s2.length() == 0) {
return 0;
}
int commonPrefixLength = 0;
for (int i = 0; i < Math.min(s1.length(), s2.length()); i++) {
if (s1.charAt(i) == s2.charAt(i)) {
commonPrefixLength++;
} else {
break;
}
}
return commonPrefixLength;
}
Как мы видим, со всеми многословие Java и мой стиль «ясность», это все еще только 18 строк кода. :)
ослабляя некоторую ясность, вы можете даже сократить на for
до:
for (int i = 0; i < Math.min(s1.length(), s2.length()) && s1.charAt(i) == s2.charAt(i); i++, commonPrefixLength++);
для 6 линий меньше.
Чтобы принять его на (правильный) крайности:
public int longestCommonPrefixLength2(String s1, String s2) {
if (s1 == null || s1.length() == 0 || s2 == null || s2.length() == 0) return 0;
int i = 0;
for (; i < Math.min(s1.length(), s2.length()) && s1.charAt(i) == s2.charAt(i); i++);
return i;
}
6 LOC :)
Что любопытно, кстати:
String
класс имеет boolean regionMatches(int toffset, String other, int ooffset, int len)
метод (который делает внутренне в значительной степени выше, чем до заданного len
) - вы также можете итеративно увеличить len
, пока он больше не вернет true, но это будет n Разумеется, не должно быть почти такой же эффективности.
Вы можете использовать 'метод substring' в классе' String', сопровождающееся вместе со сквозными –
вправо, подумал о том, что слишком. Возможно, это будет самая подходящая вещь, спасибо за вход! –
Вместо 'подстроки' вы также можете использовать метод' contains', хотя не можете сказать о преимуществах производительности, так как 'contains' может сам прокручивать строку' Strings' –