1

w を長さ n の配列とします。Java で分割統治アルゴリズムを作成して、3 つの連続した同一の文字が出現する回数を決定します。以下は私が書いたアルゴリズムです。答えは 5 のはずですが、0 になります。誰でもエラーを見つけることができますか? w = abrabbbcccccfhdddgfr の場合、3 つの連続する同一文字が 5 回出現するため、アルゴリズムは 5 を返す必要があります。1 回 bbb、3 回 ccc e 1 回 ddd

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;
    }
}
4

2 に答える 2

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])

于 2013-11-12T15:05:10.090 に答える