文字を繰り返さずにその部分文字列の長さを返さずに、最も長い部分文字列を探しています。
たとえば、次の入力が与えられた場合:
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
}'