私の文字列はタイプであり"abacsdsdvvsg"
、"a a a a a a a"
使用していますString[] stringArray = s.split("");
か、または上記の分割のString[] stringArray = s.split(" ");
複雑さは何O(string length)
ですか?
PS:コードが指定されている場合、O(...)を計算する方法を知っています。ここでは分割関数のアルゴリズムがわかりません。
私の文字列はタイプであり"abacsdsdvvsg"
、"a a a a a a a"
使用していますString[] stringArray = s.split("");
か、または上記の分割のString[] stringArray = s.split(" ");
複雑さは何O(string length)
ですか?
PS:コードが指定されている場合、O(...)を計算する方法を知っています。ここでは分割関数のアルゴリズムがわかりません。
回答:
複雑さは、分割に使用する正規表現によって異なります。(はい、String.split(...)に指定する引数は正規表現です!)
あなたの例では、それは次のようになりますO(N)
どこN
入力文字列の文字数です。
分割のアルゴリズムは、既存の正規表現の実装に基づいて、非常に単純です。概要は次のとおりです。
Matcher.find(...)
次の単語の境界を見つけるために使用します「単語」間の区切りの検索は、O(N)
正規表現(find
呼び出し)に応じて、より複雑になります。リスト、結果配列、および部分文字列の構成はO(N)
、最悪の場合になります。
正確な詳細はソースコードにあり、Googleを使用して見つけることができます。(を検索して"java.lang.String" source
選択し、目的のJavaのバージョンにドリルダウンします。または、JDKインストールに含まれているソースコードのZIPファイルでファイルを検索します)