2013-11-12 2 views
1

Пусть w - массив длины n. Напишите алгоритм разделения и покорения в java, чтобы определить количество раз, когда появляются 3 последовательных одинаковых символа. Ниже приведен алгоритм, который я написал. Ответ должен быть 5, но он дает мне 0. Может ли кто-нибудь обнаружить ошибку? Учитывая ш = abrabbbcccccfhdddgfr алгоритм должен вернуть 5, так как он соответствует пять вхождений 3 последовательных одинаковых символов: 1 раз ГЭБ, 3 раза КТС е 1 раз ДДДDivide and Conquer Algorithm [char array]

public class Test { 

    public static void main (String[] args){ 
     char[] w =  {'a','b','r','a','b','b','b','c','c','c','c', 
       'c','f','h','d','d','d','g','f','r'}; 
     System.out.println(conta_triple_main(w)); 
    } 

    public static int conta_triple_main(char[] w){ 
     if (w.length <= 2) 
      return 0; 
     else 
      return conta_triple(w, 0, w.length-1); 
    } 

    public static int conta_triple(char[] w, int i, int f){ 
     int m,result; 
     if(i >= f-1) 
      return 0; 
     else { 
      m = (i + f)/2; 
      int sx = conta_triple(w, i, m); 
      int dx = conta_triple(w, m+1, f); 
      result = sx + dx; 
      if ((m >= w.length-1) && (w[m-1] == w[m]) && (w[m] == w[m+1])) 
       result++; 
      if ((m >= w.length-2) && (w[m] == w[m+1]) && (w[m+1] == w[m+2])) 
       result++; 
     } 
     return result; 
    } 
} 
+2

-1 Каков ваш вопрос? Какие ошибки вы видите и т. Д.? – bblincoe

+1

@bblincoe, «Любой может заметить ошибку» - вопрос, который я предполагаю ... его просто отсутствует знак вопроса. у него есть вход, ожидаемый выход и фактический выход + его попытка решить проблему => +1! – A4L

+1

Выглядит как работа для отладчика. Посмотрите, будете ли вы когда-либо передавать свои операторы 'if' –

ответ

1

Это

if ((m >= w.length-1) && (w[m-1] == w[m]) && (w[m] == w[m+1])) 
     result++; 

должен быть

if ((m-1 >= i) && (m+1 <= f) && (w[m-1] == w[m]) && (w[m] == w[m+1])) 
     result++; 

Аналогично для следующего оператора if.

Наконец, вам необходимо проверить наличие (w[m] == w[m-1]) && (w[m] == w[m-2]).

0

Вот мой предлог для вашего класса:

public class Test { 

public static void main(String[] args) { 
    char[] w = {'a', 'b', 'r', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'f', 'h', 'd', 'd', 'd', 'g', 'f', 'r'}; 
    System.out.println(conta_triple_main(w)); 
} 

public static int conta_triple_main(char[] w) { 
    if (w.length <= 2) { 
     return 0; 
    } else { 
     return conta_triple(w); 
    } 
} 

public static int conta_triple(char[] w) { 
    int result = 0; 
    for (int i = 0; i < w.length - 2; i++) { 
     char c = w[i]; 
     if (c == w[i + 1] && c == w[i + 2]) { 
      result++; 
     } 
    } 
    return result; 
} 
} 
Смежные вопросы