4

これは、文字列のすべての部分文字列を見つけるためのソリューションです。

for (int i = 0; i < str.length(); i++) {
    String subStr;
    for (int j = i; j < str.length(); j++) {
        subStr = str + str.charAt(j));
        System.out.println(subStr);
    }
}

インターネット全体で、このコードの複雑さは O(n 2 ) であると読みました。ただし、+ 操作は O(n) 操作です。したがって、私の意見では、複雑さは O(n 3 ) である必要があります。

私が間違っている場合は、私の理解を修正してください。

4

3 に答える 3

1

文字列への文字の追加は O(1) 操作です。で出力を印刷するのに必要な時間も考慮に入れると、O(n 3println ) が得られます。

于 2013-07-07T09:36:10.753 に答える
1

文字列のすべての部分文字列を見つけるのは O(n 2 ) です (部分文字列を見つけるとは、開始インデックスと終了インデックスを決定することを意味します)。部分文字列の総数は O(n 2 ) であるため、簡単に確認できます。

しかし、それらをすべて出力するのは O(n 3 ) です。これは、出力する文字の総数が O(n 3 ) であるためです。コードでは、 printlnO(n) の複雑さが追加+されます (適切に使用/実装されている場合、オペレーターは O(1) の複雑さを持つ必要があります)。

于 2013-07-07T09:36:20.383 に答える