суббота, 2 июня 2012 г.

Java-задача vol. 3


Недавно я побывал на собеседовании, где мне предложили решить ряд задач по 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:       }  


5 комментариев:

  1. Вот такой вариант накидал:

    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();
    }

    ОтветитьУдалить
    Ответы
    1. Очень изящное решение =)

      Мне понравилось на все 100 =)

      Удалить
  2. 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());

    ОтветитьУдалить
  3. Еще одно решение:
    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);
    }

    ОтветитьУдалить