繰り返されない文字を含む最も長い部分文字列の長さを見つけます。

繰り返されない文字を含む最も長い部分文字列の長さを見つけます。

文字を繰り返さずにその部分文字列の長さを返さずに、最も長い部分文字列を探しています。

たとえば、次の入力が与えられた場合:

abcbdbdsdfng

出力は次のようになります。

5

説明する:

  • 最初の文字列はabc(長さ3)です。
  • 次の可能性はcbd(長さ3)です。
  • 次の可能性はdb(長さ2)です。
  • 次の可能性はbds(長さ3)です。
  • 次の可能性はsdfng(長さ5)です。

したがって、この例にはsdfng一意の文字のみを含む最も長い部分文字列があります。

ベストアンサー1

POSIXsh構文を使用し、awkユーティリティを一度呼び出します。

<input awk '
  {
    cur = longest = ""
    n = l = 0
    while ($0 != "") {
      c = substr($0, 1, 1)
      if (i = index(cur, c)) {
        cur = substr(cur, i+1)
        l -= i
      }
      $0 = substr($0, 2)
      cur = cur c
      if (++l > n) {
        n = l
        longest = cur
      }
    }
    printf "\"%s\" (%d)\n", longest, n
  }'

おすすめ記事