私の解決策で問題「繰り返し文字列一致」

user13066649:

私は倍の列の最小数伝える必要がありA、その文字列がように繰り返される必要があるとBのサブなりましたA

私の答えは、のようないくつかのテストケースのために間違っています

A = "abc"
B = "cabcabca"

私の出力は3..itは4でなければなりません来ています。

私のコードは -

class Solution {
    public int repeatedStringMatch(String A, String B) {
        int count = 0;
        while (A.length() <= 1000) {
            if (A.indexOf(B) != -1)
                return (count + 1);
            else
                A = A + A;
            count++;
        }
        return -1;
    }
}
アービンド・クマールのAvinash:

問題は、でありA=A+A;、それはなるようにAようにabcabc、最初の反復の後にabcabcabcabc、第2の反復の後にabcabcabcabcabcabcabcabc第3の反復後、すなわちオンの代わりに添付取得ので、ストリングは各反復で倍増してきています。

それはあなたが追加するタスクが与えられているようである2最初の反復の後、各反復IEでそれ自体には、それがなるべき2 + 2 = 4、2回目の反復の後、それがなるべき4 + 2 = 6、3回目の繰り返しの後にそれがなるべき6 + 2 = 8とそうで。

あなたが行っている方法のに対し、それはなり2 + 2 = 4、最初の反復の後4 + 4 = 8、2回目の反復の後に8 + 8 = 163回目の繰り返しなどの後。

注意点として、あなたはループ内で文字列の連結を使用しないでください。また、従うべきであるJavaが命名規則変数名は例えばAなければなりませんa

次のように実行します。

public class Main {
    public static void main(String[] args) {
        // Test 
        System.out.println(repeatedStringMatch("abc", "cabcabca"));
    }

    static int repeatedStringMatch(String a, String b) {
        int count = 1;
        StringBuilder sb = new StringBuilder(a);
        while (sb.length() <= 1000) {
            if (sb.indexOf(b) != -1) {
                return count;
            } else {
                sb.append(a);
                count++;
            }
        }
        return -1;
    }
}

出力:

4

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=372851&siteId=1