すでにベストアンサーが出ているようですが、気になったので実験してみました。
私も本当かなと思ってやってみたのですが、その通りの結果になりました。
文字列を一文字ずつコピーするためcharの配列を持つMyStringクラスを定義してそれに1文字ずつコピーをしてみました。https://paiza.io/projects/NR8hnbX347ScPJ-aMcVkBQ
java
1 public class MyString {
2 public char [ ] str ;
3
4 public MyString ( String str ) {
5 this . str = str . toCharArray ( ) ;
6 }
7
8 public MyString ( int length ) {
9 this . str = new char [ length ] ;
10 }
11
12 public int length ( ) {
13 return this . str . length ;
14 }
15
16 public String toString ( ) {
17 return new String ( str ) ;
18 }
19 }
20
21 public class Main {
22 public static void main ( String [ ] args ) throws Exception {
23 //コピー元の文字列のリスト
24 List < MyString > list = new ArrayList < MyString > ( ) ;
25 list . add ( new MyString ( "aa" ) ) ;
26 list . add ( new MyString ( "bb" ) ) ;
27 list . add ( new MyString ( "cc" ) ) ;
28 list . add ( new MyString ( "dd" ) ) ;
29
30 MyString jointedStr = new MyString ( 0 ) ; //連結した文字列
31 int count = 0 ; // 文字をコピーした数
32
33
34 for ( MyString str : list ) {
35 // コピー先の文字列
36 MyString newJointedStr =
37 new MyString ( jointedStr . length ( ) + str . length ( ) ) ;
38
39 int i = 0 ; // コピー時のインデックス値
40
41 // 元の文字列を新しい文字列に1字ずつコピー
42 for ( char c : jointedStr . str ) {
43 newJointedStr . str [ i ++ ] = c ;
44 }
45
46 // 追加する文字列を新しい文字列に1字ずつコピー
47 for ( char c : str . str ) {
48 newJointedStr . str [ i ++ ] = c ;
49 }
50
51 // 連結した文字列を更新
52 jointedStr = newJointedStr ;
53
54 // 連結結果の表示
55 System . out . println ( jointedStr ) ;
56 // コピーの回数を表示
57 System . out . println ( i ) ;
58
59 count += i ; // コピーの回数を積算
60 }
61
62 // 文字をコピーした回数を表示
63 System . out . println ( count ) ;
64 }
65 }
結果はこうです。
text
1 aa
2 2
3 aabb
4 4
5 aabbcc
6 6
7 aabbccdd
8 8
9 20
1回めで文字数の2が、2回めで文字数かける2の4が表示されています。
合計のコピー回数は x (n + 1) * n / 2 計算量では、O(xn^2)の計算量といって間違いではないです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/21 13:24
2016/08/21 16:40
退会済みユーザー
2016/08/22 11:24
2016/08/23 01:09 編集
退会済みユーザー
2016/08/23 02:32
2016/08/23 02:56
退会済みユーザー
2016/08/24 01:39
2016/08/24 13:02
2017/05/09 15:47