2016-11-30 3 views
1

正規表現を使用して文字列sの中に繰り返し文字列を見つけると、次のようなJavaコードを記述しました。今、私はそれの複雑さを見いだそうとします、もし誰かがそれの複雑さを知っているなら、私に教えてください。Javaでの正規表現の時間複雑度

  String s = "ABCABCAAAABBBBCCAAABCGABCABC"; 

      Pattern pattern = Pattern.compile("(?:([ABC])(?!\\1)([ABC])\\1\\2)+"); 
      Matcher matcher = pattern.matcher(s); 

      while (matcher.find()) { 
       System.out.print("FOUND"); 
      } 
+1

「推奨を求める」とマークされている理由はわかりませんが、OPが問題を解決するために多くのことを行ったようには見えません。 – chrylis

+0

matcher.find()がどのように動作するかを調べる必要があります。どのように文字列を検索し、いつ停止しますか? – Sedrick

+0

私は野生の推測を行い、それがmatcher.find()の複雑さと等しいと言うでしょう – Sedrick

答えて

2

正規表現は、有限状態マシンで実装できます。ステートマシンは固定数のステートと、これらのステート間の遷移の固定最大数(T)を持ちます。

各文字について、それが拒否されるか、受け入れられるまで、遷移がとられます。

Tは定数であるため、O(String.length()* T)またはO(String.length())があります。