Недавно я побывал на собеседовании, где мне предложили решить ряд задач по Java. Часть из них была очень проста и не интересна, а вот последняя оказалась интересной, как по мне. Интерес заключается в том, что я написал подряд 3 решения, одно из которых я приведу ниже.
Условие: Дан метод public String subStringSearch(String str). Нужно написать тело метода, которое будет возвращать максимально длинную подстроку, с которой начинается str и которой заканчивается str, но в инвертированном виде.
Примеры:
str = "abctrefcba", returns: "abc";
str = "rmmr", returns: "rm";
str = "asasfgh", returns: "";
В комментариях пишите свои решения. Как всегда ниже я привожу свой кусок кода:
1: public String subStringSearcher(String str) {
2: String result = "";
3: int length = str.length();
4: if (length > 1) {
5: int mid = length/2;
6: String first = str.substring(0, mid);
7: String second = str.substring(mid);
8: for (int i = 0; i <= mid; i++) {
9: String head = first.substring(0, i);
10: int lengthOfSecond = second.length();
11: String preparedTail = second.substring(lengthOfSecond-i, lengthOfSecond);
12: String tail = new StringBuffer(preparedTail).reverse().toString();
13: if (head.equals(tail))
14: result = head;
15: }
16: }
17: return result;
18: }

Вот такой вариант накидал:
ОтветитьУдалитьpublic String subStringSearch(String str)
{
char[] strSymbols = str.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < strSymbols.length / 2; i++)
{
if (strSymbols[i] == strSymbols[strSymbols.length - 1 - i])
{
sb.append(strSymbols[i]);
}
}
return sb.toString();
}
Очень изящное решение =)
УдалитьМне понравилось на все 100 =)
String str = "abctrefcba";
ОтветитьУдалитьStringBuilder result = new StringBuilder();
int length = str.length();
for (int i = 0; i < length/2; i++) {
char symbol = str.charAt(i);
if (symbol == str.charAt(length - (i + 1))) {
result.append(symbol);
} else {
break;
}
}
System.out.println("Result = " + result.toString());
Компактненько =)
УдалитьЕще одно решение:
ОтветитьУдалитьpublic String subStringSearch(String str) {
int len = str.length();
int i;
for (i = 0; i < len / 2; i++) {
if (str.charAt(i) != str.charAt(len - 1 - i)) {
break;
}
}
return str.substring(0, i);
}