Chuỗi con chung lớn nhất


30

Tạo một chương trình hoặc hàm lấy danh sách các chuỗi làm đầu vào và xuất chuỗi dài nhất là chuỗi con của tất cả các chuỗi đầu vào. Nếu có một số chuỗi con có độ dài bằng nhau và không còn chuỗi con nữa, hãy xuất bất kỳ chuỗi con nào trong số chúng.

  • Điều này có thể có nghĩa là xuất chuỗi trống.
  • Nếu có một số đầu ra hợp lệ, bạn có thể xuất bất kỳ một trong số chúng. Bạn không bắt buộc phải cung cấp đầu ra nhất quán cho một đầu vào nhất định miễn là đầu ra luôn hợp lệ.
  • Sẽ luôn có ít nhất một chuỗi trong đầu vào, nhưng có thể không có chuỗi không trống.
  • Tất cả các ký tự ASCII có thể in có thể xuất hiện trong đầu vào. Bạn có thể cho rằng đó là những nhân vật duy nhất xuất hiện.
  • Bạn có thể lấy đầu vào hoặc sản xuất đầu ra bằng bất kỳ phương thức mặc định nào .
  • Sơ hở tiêu chuẩn không được phép.
  • Đây là - càng ít byte mã thì càng tốt.

Các trường hợp thử nghiệm:

[Inputs] -> [Valid outputs (choose one)]

["hello", "'ello"] -> ["ello"]
["very", "much", "different"] -> [""]
["empty", "", "STRING"] -> [""]
["identical", "identical"] -> ["identical"]
["string", "stRIng"] -> ["st", "ng"]
["this one", "is a substring of this one"] -> ["this one"]
["just one"] -> ["just one"]
["", "", ""] -> [""]
["many outputs", "stuptuo ynam"] -> ["m", "a", "n", "y", " ", "o", "u", "t", "p", "s"]
["many inputs", "any inputs", "ny iii", "yanny"] -> ["ny"]
["%%not&", "ju&#st", "[&]alpha_numeric"] -> ["&"]


2
@ Adam rằng câu hỏi yêu cầu tiểu chung dài nhất chuỗi , không substring.
Doorknob

1
Các chuỗi sẽ chỉ là chữ và số, hoặc chữ cái, hoặc chỉ có thể in-ascii?
Hiện thân của sự thiếu hiểu biết

@EmbodimentofIgnorance Tất cả các ký tự ASCII có thể in có thể xuất hiện trong đầu vào.
Sara J

2
@Shaggy Nói chung, không. Nếu cả hai có thể được phân biệt, undefinedngụ ý không có chuỗi đầu ra hợp lệ. Nếu chuỗi trống (hoặc bất kỳ chuỗi nào khác) là đầu ra hợp lệ, tuyên bố không có đầu ra hợp lệ là không chính xác.
Sara J

Câu trả lời:


8

Python 2 , 82 byte

f=lambda h,*t:h and max(h*all(h in s for s in t),f(h[1:],*t),f(h[:-1],*t),key=len)

Hãy thử trực tuyến!

Đưa đầu vào bị bắn tung tóe. Sẽ hết thời gian cho các đầu vào nơi chuỗi đầu tiên dài.

Ý tưởng là lấy chuỗi con của chuỗi đầu tiên hđể tìm chuỗi dài nhất xuất hiện trong tất cả các chuỗi còn lại t. Để làm như vậy, chúng tôi đệ quy chi nhánh về việc loại bỏ ký tự đầu tiên hoặc cuối cùng của h.


Python 2 , 94 byte

lambda l:max(set.intersection(*map(g,l)),key=len)
g=lambda s:s and{s}|g(s[1:])|g(s[:-1])or{''}

Hãy thử trực tuyến!

Một phương pháp trực tiếp hơn. Hàm phụ trợ gtạo ra tập hợp tất cả các chuỗi con svà hàm chính mất thời gian dài nhất trong giao điểm của chúng.


8

Brachylog (v2), 3 9 byte

{sᵛ}ᶠlᵒtw

Hãy thử trực tuyến!

Chương trình đầy đủ. Đầu vào từ đầu vào tiêu chuẩn (dưới dạng danh sách chuỗi kiểu JSON), đầu ra thành đầu ra tiêu chuẩn.

Giải trình

{sᵛ}ᶠlᵒtw
 s         Find a substring
  ᵛ          of every element {of the input}; the same one for each
{  }ᶠ      Convert generator to list
     lᵒt   Take list element with maximum length
        w  Output it

Rõ ràng, thứ tự tiebreak trên skhông phải là gần như mọi thứ khác trong Brachylog, vì vậy chúng ta cần ghi đè thủ công để tạo ra sản lượng dài nhất. (Đó là một chút bực bội: bốn ký tự phụ cho ghi đè, cộng với hai ký tự nhóm vì Brachylog không phân tích hai phép ẩn dụ liên tiếp.)

Brachylog skhông trả lại các chuỗi con trống, vì vậy chúng tôi cần một mẹo nhỏ để khắc phục điều đó: thay vì thực hiện đệ trình chức năng (đó là những gì thường được thực hiện), chúng tôi viết một chương trình đầy đủ, xuất ra đầu ra tiêu chuẩn. Bằng cách đó, nếu có một chuỗi con chung, chúng ta chỉ cần xuất nó và chúng ta đã hoàn thành. Nếu không có một chuỗi con chung, chương trình sẽ bị lỗi - nhưng nó vẫn không in được gì cho đầu ra tiêu chuẩn, do đó nó xuất ra chuỗi null như dự định.


1
Tôi đã thử điều này với đầu vào ["nhiều inpuabts", "bất kỳ inabputs", "ny iabii", "yanabny"]. Tôi mong đợi kết quả abny . Nhưng chỉ nhận được kết quả a . Tôi có làm điều gì sai ?
t-clausen.dk

1
Ugh, có vẻ như tôi đã nhớ thứ tự tiebreak ssai, và ghi đè thứ tự tiebreak khá tốn kém. Mặc dù vậy, làm điều đó ngay bây giờ, bởi vì điều quan trọng là câu trả lời phải chính xác. Bằng cách nào đó không có trường hợp thử nghiệm nào tôi đã thử nhận thấy sự khác biệt.
ais523

1
@ ais523 Thứ tự stạo chuỗi con là bằng cách trước tiên đưa ra tất cả các tiền tố của đầu vào (đầu tiên dài nhất), sau đó bỏ đầu tiên và lặp lại
Kroppeb

5

Thạch , 12 6 byte

Ẇ€f/ṫ0

Hãy thử trực tuyến!

Cảm ơn @Jonathan ALLan vì đã lưu 6 byte!


Tôi tin rằng Ẇ€œ&/Ṫḟ0sẽ thực hiện công việc và lưu bốn byte vì các chuỗi con đã được sắp xếp theo độ dài, do đó kết quả được lọc sẽ là; sau đó, tất cả những gì còn lại là khi không có đuôi trùng khớp tạo ra số 0 và vì chúng tôi được đảm bảo danh sách các ký tự, chúng tôi có thể chỉ cần lọc chúng ra.
Jonathan Allan

Ngoài ra tôi nghĩ œ&/có thể được thay thế bằng cách f/ở đây để cứu người khác
Jonathan Allan

Tôi đã gửi một yêu cầu kéo tới (hy vọng) làm cho kết quả của việc giảm danh sách trống thành một danh sách trống (thay vì tăng TypeError). Nếu điều đó được hợp nhất trong tôi tin rằng câu trả lời này sau đó có thể trở thành một câu hỏi sáu Ẇ€f/ṛ/.
Jonathan Allan

@Jonathan ALLan nghe có vẻ tốt. Cảm ơn những lời khuyên khác - hy vọng bạn rất vui khi tôi kết hợp chúng.
Nick Kennedy

Vâng, lý do của tôi cho những bình luận đó là cho phép bạn kết hợp các ý tưởng vào bài viết của bạn.
Jonathan Allan

5

Ruby 2.6, 76 59 54 byte

->a{*w=a;w.find{|r|w<<r.chop<<r[1..];a.all?{|s|s[r]}}}

Hãy thử trực tuyến! - Phiên bản Ruby 2.5 (56 byte)

Làm sao?

Tạo một danh sách các kết quả khớp tiềm năng, ban đầu được đặt thành mảng ban đầu. Lặp lại trong danh sách và nếu một chuỗi không khớp, hãy thêm 2 chuỗi mới vào đuôi danh sách, cắt bỏ ký tự đầu tiên hoặc ký tự cuối cùng. Vào cuối, một trận đấu (cuối cùng là một chuỗi rỗng) sẽ được tìm thấy.

Cảm ơn Kirill L cho -2 byte và histocrat cho -2 khác


4

R , 119 116 108 106 byte

function(S,`?`=nchar,K=max(?S),s=Reduce(intersect,lapply(S,substring,0:K,rep(0:K,e=K+1))))s[which.max(?s)]

Hãy thử trực tuyến!

Tìm tất cả các chuỗi con của mỗi chuỗi, tìm giao điểm của từng danh sách các chuỗi con, sau đó cuối cùng trả về (một trong) chuỗi dài nhất.

-3 byte nhờ Kirill L.

-8 byte sử dụng lapply thay vì Map

-2 byte nhờ Kirill L. một lần nữa, loại bỏ niềng răng


Tôi không có thời gian để kiểm tra, nhưng nếu tôi không nhầm, 2 lần xuất hiện ncharlà đủ để lưu thứ gì đó bằng cách khai báo ncharlà một toán tử đơn nguyên.
Kirill L.

@KirillL. vâng, nó ngắn hơn 2 byte. Cảm ơn! Bí danh listtương tự cho chúng ta -3 byte.
Giuseppe

Bạn cũng có thể thả niềng răng cho -2
Kirill L.

@KirillL. cảm ơn! Tôi hơi lo lắng Tôi sẽ bắt đầu làm điều đó với mã sản xuất ...
Giuseppe

đó là vấn đề với việc chơi golf một ngôn ngữ bạn sử dụng hàng ngày
MickyT

4

05AB1E , 14 9 8 byte

€Œ.«ÃéθJ

-6 byte nhờ @Adnan .

Dùng thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

€Œ       # Get the substring of each string in the (implicit) input-list
       # Right-reduce this list of list of strings by:
    Ã    #  Only keep all the strings that are present in both list of strings
     é   # Sort by length
      θ  # And pop and push its last item
         # The substrings exclude empty items, so if after the reduce an empty list remains,
         # the last item will also be an empty list,
       J # which will become an empty string after a join
         # (after which the result is output implicitly)

1
Tôi nghĩ €Œ.«Ãõªéθnên làm việc cho 9 byte.
Ad Nam

@Ad Nam Chờ đã, chúng tôi có giảm .. Làm thế nào tôi bỏ lỡ điều đó. : SI đã thử Å«Ã, nhưng không nhận ra rằng tôi nên sử dụng .«Ãthay thế .. Cảm ơn!
Kevin Cruijssen

1
Trên thực tế, tôi nghĩ €Œ.«ÃéθJnên làm việc cho 8.
Adnan

4

Zsh , 126 ... 96 byte

-3 byte từ số học cho, -6 byte từ ẩn "$@" (cảm ơn roblogic), -5 byte từ việc loại bỏ không cần thiết { }, -1 byte từ dạng ngắn for, -1 byte bằng cách sử dụng repeat, -1 byte bằng cách ghép for s ($b)với thân của nó, -13 byte bằng cách thay đổi vòng lặp lặp ra cho một số jank eval.

for l
eval a=\( \$l\[{1..$#l},{1..$#l}\] \)&&b=(${${b-$a}:*a})
for s ($b)(($#x<$#s))&&x=$s
<<<$x

Hãy thử trực tuyến! Hãy thử trực tuyến! Hãy thử trực tuyến!

Chúng tôi đọc tất cả các chuỗi con có thể vào mảng a, và sau đó đặt thành bgiao điểm của các mảng ab. Cấu trúc ${b-$a}sẽ chỉ thay thế $aở lần lặp đầu tiên: Không giống như mở rộng anh chị em của nó${b:-$a} , nó sẽ không thay thế khi bđược đặt nhưng trống.

for l;                              # implicit "$@"

# === OLD ===
{
    a= i=                           # empty a and i
    repeat $[$#l**2]                # compound double loop using div/mod
        a+=($l[++i/$#l+1,i%$#l+1])  # append to a all possible substrings of the given line
#               1+i/$#l             # 1,1,1...,  1,1,2,2,2,... ...,  n,n
#                       1+i%$#l     # 1,2,3...,n-1,n,1,2,3,... ...,n-1,n
#       a+=( $l[       ,     ] )    # append that substring to the array
# === NEW ===
    eval a=\( \
        \$l\[{1..$#l},{1..$#l}\] \  # The {bracket..expansions} are not escaped
    \) &&
# ===     ===
    b=( ${${b-$a}:*a} )
#         ${b-$a}                   # if b is unset substitute $a
#       ${       :*a}               # take common elements of ${b-$a} and $a
#   b=(               )             # set b to those elements
}
for s ($b)                          # for every common substring
    (( $#x < $#s )) && x=$s         # if the current word is longer, use it
<<<$x                               # print to stdout

Làm thế nào để bit này hoạt động? a+=( $l[1+i/$#l,1+i%$#l] )
roblogic

1
@roblogic Tôi nghĩ rằng tôi đã giải thích nó tốt hơn bây giờ, kiểm tra chỉnh sửa. Ý tưởng là lặp đến n ^ 2 và sử dụng / và% thay vì sử dụng 2 forvòng lặp lồng nhau
GammaFactor

1
bạn có thể cắt giảm một for l in "$@"cách đơn giản for l;- đó là một trò bịp
bợm

Tôi phải nói rằng, zsh thanh lịch hơn nhiều so với bash. Không có gì tương tự với so sánh mảng đẹp này AFAIKb=(${${b-$a}:*a})}
roblogic

1
Có một số điều gọn gàng bạn có thể làm với nó, và nó không phải là tất cả phổ biến. Điều đó chuyển thành tôi thêm một câu trả lời zsh cho hầu hết các câu hỏi tôi gặp. : P Nếu bạn muốn học zsh, tôi khuyên bạn nên man zshexpnman zshparamđặc biệt. Tôi luôn để chúng mở khi viết câu trả lời.
GammaFeft

3

Haskell , 80 byte

import Data.List
f(x:r)=last$sortOn(0<$)[s|s<-inits=<<tails x,all(isInfixOf s)r]

Hãy thử trực tuyến!

Nhận tất cả các hậu tố ( tails) của từ đầu tiên xtrong danh sách và lấy tất cả các tiền tố ( inits) của các hậu tố đó để có được tất cả các chuỗi con scủa x. Giữ mỗi chuỗi sđó isInfixOf alltrong danh sách còn lại r. Sắp xếp những chuỗi con theo chiều dài (sử dụng các (0<$)thủ thuật ) và trả lại cuối cùng.


3

Võng mạc 0.8.2 , 48 byte

M&!`(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)
O#$^`
$.&
1G`

Hãy thử trực tuyến! Giải trình:

M&!`(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)

Đối với mỗi hậu tố của chuỗi đầu tiên, hãy tìm tiền tố dài nhất cũng là chuỗi con của tất cả các chuỗi khác. Liệt kê tất cả các tiền tố hậu tố (tức là các chuỗi con). Nếu không có chuỗi con phù hợp, chúng ta sẽ kết thúc với chuỗi rỗng, đó là những gì chúng ta muốn.

O#$^`
$.&

Sắp xếp các chuỗi con theo thứ tự ngược chiều dài.

1G`

Chỉ giữ đầu tiên, tức là chuỗi con dài nhất.


Đặt nsố chuỗi đối số. Vậy (?=(.*\n.*\1)*.*$)thì có nên (?=(.*\n.*\1){n-1}.*$)không? Trường hợp thử nghiệm:["very", "different", "much"] -> [""]
mazzy

1
@mazzy Tôi không thấy vấn đề: Hãy thử trực tuyến!
Neil

nó không phải là vấn đề. với {n}bạn có thể xóa các mẫu bắt đầu và kết thúc và giữ (.+)(?=(.*\n.*\1){n}nếu Retina cho phép viết nngắn hơn(?<=^.*).*$
mazzy

@mazzy Tôi không thể ở Retina 0.8.2 và ở Retina 1 Tôi phải loay hoay với eval, có lẽ sẽ lâu hơn nữa.
Neil

3

Truy vấn TSQL, 154 byte

USE master
DECLARE @ table(a varchar(999)collate Latin1_General_CS_AI,i int identity)
INSERT @ values('string'),('stRIng');

SELECT top 1x FROM(SELECT
distinct substring(a,f.number,g.number)x,i
FROM spt_values f,spt_values g,@ WHERE'L'=g.type)D
GROUP BY x ORDER BY-sum(i),-len(x)

Dùng thử trực tuyến

Làm cho trường hợp nhạy cảm bằng cách khai báo cột 'a' với đối chiếu có chứa CS (phân biệt chữ hoa chữ thường).

Tách tất cả các chuỗi từ 2540 vị trí bắt đầu (nhiều điểm giống nhau) nhưng các giá trị hữu ích nằm trong khoảng từ 1 đến 2070 và kết thúc 0 đến 22 ký tự sau vị trí bắt đầu, vị trí kết thúc có thể dài hơn bằng cách thay đổi loại thành 'P' thay vì 'L', nhưng sẽ làm tê liệt hiệu suất.

Những chuỗi khác biệt trong mỗi rownumber được tính. Số lượng cao nhất sẽ luôn bằng số lượng hàng trong biến bảng '@'. Đảo ngược thứ tự trên cùng một số sẽ rời khỏi chuỗi con với hầu hết các kết quả trên đầu kết quả, theo sau là độ dài đảo ngược của chuỗi con sẽ để lại kết quả dài nhất với hầu hết các kết quả trùng khớp. Truy vấn chỉ chọn 1 hàng trên cùng.

Để có được tất cả các câu trả lời, hãy thay đổi phần đầu tiên của truy vấn thành

CHỌN 1 mối quan hệ hàng đầu x TỪ


3

C # (Trình biên dịch tương tác Visual C #), 320 256 byte

l=>(string.Join(",",l.Select(s=>new int[s.Length*s.Length*2].Select((i,j)=>string.Concat(s.Skip(j/-~s.Length).Take(j%-~s.Length))))
.Aggregate((a,b)=>a.Intersect(b)).GroupBy(x=>x.Length).OrderBy(x =>x.Key).LastOrDefault()?.Select(y=>y)??new List<string>()));

Hãy thử trực tuyến!

Đạo cụ cho @Expired Data và @dana


Bạn chỉ có thể trả về chuỗi từ một hàm. Vì vậy, trong trình biên dịch tương tác, nó có thể trông giống như thế này: 294 byte
Dữ liệu hết hạn

1
Đây là giải pháp đánh bại một số byte 215 byte
Dữ liệu hết hạn

@ExpiredData ah hoàn hảo đây là ví dụ tôi cần :)
Innat3



3

Perl 6, 62 60 bytes

{~sort(-*.comb,keys [∩] .map(*.comb[^*X.. ^*]>>.join))[0]}

Try it online!

I'm a little annoyed the Perl 6 can't do set operations on lists of lists, which is why there's an extra .comb and >> in there.

Another annoying thing is that max can't take an function for how to compare items, meaning I have to use sort instead. As pointed out in the comments, max can take an argument, however it ends up longer since I have to take into account max returning negative infinity when there are common substrings (Try it online!).


3
max can take such a function (arity 1 though), either by position when called in OO mode, or a named :by argument in procedural mode.
Ven

2

Japt v2.0a0 -hF, 8 bytes

Îã f@eøX

Thanks to Shaggy for saving 3 bytes

Try it

Îã              //Generate all substrings of the first string
 f@             //Filter; keep the substrings that satisfy the following predicate:
   e            //    If all strings of the input...
    øX          //    Contain this substring, then keep it
-h              //Take last element
-F              //If last element is undefined, default to empty string

You shouldn't need to sort by length at the end, saving 3 bytes. Also, -F defaults to the empty string.
Shaggy

2

Japt -h, 8 bytes

(I could knock off the last 3 bytes and use the -Fh flag instead but I'm not a fan of using -F)

mã rf iP

Try it or run all test cases

mã rf iP     :Implicit input of array
m            :Map
 ã           :  Substrings
   r         :Reduce by
    f        :  Filter, keeping only elements that appear in both arrays
      i      :Prepend
       P     :  An empty string
             :Implicit output of last element


1

Python 2, 103 bytes

lambda b:max(reduce(set.__and__,[{d[f:e]for e in range(len(d)+2)for f in range(e)}for d in b]),key=len)

Try it online!

This is an anonymous lambda that transforms each element into the set of all substrings, then reduces it by set intersection (set.__and__) and then returns the max element by length.


1 byte shorter with set.intersection.
ovs


1

Perl 5 (-aln0777F/\n/ -M5.01 -MList::util=max), 99 bytes

may be golfed more certainly

map/(.+)(?!.*\1)(?{$h{$&}++})(?!)/,@F;say for grep{y///c==max map y///c,@b}@b=grep@F==$h{$_},keys%h

TIO


1

JavaScript (ES6),  98  92 bytes

a=>(g=b=s=>a.every(x=>~x.indexOf(s))?b=b[s.length]?b:s:g(s.slice(0,-1,g(s.slice(1)))))(a[0])

Try it online!


1

Charcoal, 30 bytes

≔⊟θη≔⁰ζFLη«≔✂ηζ⊕ι¹ε¿⬤θ№κεPε≦⊕ζ

Try it online! Link is to verbose version of code. This algorithm is more efficient as well as shorter than generating all substrings. Explanation:

≔⊟θη

Pop the last string from the input list into a variable.

≔⁰ζ

Zero out the substring start index.

FLη«

Loop over all possible substring end indices. (Actually this loops from 0 excluding the length, so the value is adjusted later.)

≔✂ηζ⊕ι¹ε

Obtain the current substring.

¿⬤θ№κε

Check whether this substring is contained in all of the other input strings.

Pε

If it is then overprint any previously output substring.

≦⊕ζ

Otherwise try incrementing the substring start index.


1

Bash, 295 .. 175 bytes

Not pretty but at least it works. Try it Online

-37 by general cleaning up ; -52 by plagiarising from the zsh answer ; -26 by replacing array with a loop ; -2 thanks to GammaFunction ; -3 removed i=0 from for loop

for l;{ d=${#l}
for((;i<d**2;i++)){ a="${l:i/d:1+i%d}" k=
for n;{ [[ $n =~ $a ]]&&((k++));}
((k-$#))||b+=("$a");};}
for e in "${b[@]}";do((${#e}>${#f}))&&f="$e";done
echo "$f"

Here's the original ungolfed script with comments


1
Save 2 more: You can replace ((k==$#))&& with ((k-$#))||. This also lets you use k= instead of setting it to 0.
GammaFunction

1
I think "Not pretty but at least it works" is the MO for bash scripts :)
joeytwiddle

0

Red, 266 174 bytes

func[b][l: length? s: b/1 n: 1 until[i: 1 loop n[t: copy/part at s i l r: on foreach u
next b[r: r and(none <> find/case u t)]if r[return t]i: i + 1]n: n + 1 1 > l: l - 1]""]

Try it online!

Changed the recursion to iteration and got rid of the sorting.



0

JavaScript (Node.js), 106 bytes

a=>(F=(l,n,w=a[0].substr(n,l))=>l?n<0?F(--l,L-l):a.some(y=>y.indexOf(w)<0)?F(l,n-1):w:"")(L=a[0].length,0)

Try it online!

a=>(                      // Main function
 F=(                      //  Helper function to run through all substrings in a[0]
  l,                      //   Length
  n,                      //   Start position
  w=a[0].substr(n,l)      //   The substring
 )=>
 l?                       //   If l > 0:
  n<0?                    //    If n < 0:
   F(--l,L-l)             //     Check another length
  :a.some(                //    If n >= 0: 
   y=>y.indexOf(w)<0      //     Check whether there is any string not containing the substring
                          //     (indexOf used because of presence of regex special characters)
  )?                      //     If so:
   F(l,n-1)               //      Check another substring
  :w                      //     If not, return this substring and terminate
                          //     (This function checks from the longest substring possible, so
                          //      it is safe to return right here)
 :""                      //   If l <= 0: Return empty string (no common substring)
)(
 L=a[0].length,           //  Starts from length = the whole length of a[0]
 0                        //  And start position = 0
)

0

Gaia, 15 bytes

eḋ¦&⊢⟨:l¦:⌉=¦⟩∇

Try it online!

e		| eval as code
 ḋ¦		| find all non-empty substrings
   &⊢		| Reduce by set intersection
              ∇	| and return the first element where
      ⟨:l¦:⌉=¦⟩	| the length is equal to the max length

0

PowerShell, 165 163 87 bytes

-76 bytes thanks to Nail for the awesome regexp.

"$($args-join'
'|sls "(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)"-a -ca|% m*|sort Le*|select -l 1)"

Try it online!

Less golfed:

$multilineArgs = $args-join"`n"
$matches = $multilineArgs|sls "(?<=^.*)(.+)(?=(.*\n.*\1)*.*$)" -AllMatches -CaseSensitive|% matches
$longestOrNull = $matches|sort Length|select -Last 1
"$longestOrNull"




0

Pyth, 16 bytes

eolN.U@bZm{s./dQ

Try it online!

       m     Q    # Map Q (parsed input) over the following function (lambda d:
          ./d     # Partitions of d (all substrings)
         s        # Reduce on + (make one list)
        {         # deduplicate
    .U            # reduce the result on the following lambda, with starting value result[0]
      @bZ         # lambda b,Z: Intersection between b and Z
                  # Result so far: all common substrings in random order
 o                # sort the resulting sets by the following lambda function:
  lN              # lambda N: len(N)
e                 # last element of that list
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.