문자 만 포함하는 문자열이 주어지면 순서에 관계없이 단어에 포함 된 연속 알파벳 문자의 가장 긴 실행 길이를 출력하십시오. 예제 알고리즘은 단어를 정렬하고 중복을 제거한 다음 가장 긴 실행 길이를 출력 할 수 있습니다.
테스트 사례
watch -> 1
stars -> 3
antidisestablishmentarianism -> 3
backdoor -> 4
a -> 1
tutorials -> 4
예를 들어, antidisestablishmentarianism
글자가 포함되어 있습니다 abdehilmnstr
. 가장 긴 실행은 lmn
하고 rst
, 모두 길이 3의.
노트
모든 소문자, 모든 대문자 또는 대소 문자를 입력으로 사용할 수 있지만 대소 문자는 단어에 대한 정보를 인코딩 할 수 없습니다 (즉, 첫 번째 n
문자 n
는 가장 긴 실행 길이 인 대문자를 만들 수 없습니다 ).
이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
답변
젤리 , 10 9 8 7 6 바이트
OṬṣ0ZL
9는 Sok의 방법을 사용했습니다 .ṢQẆẇƇØaṪL
방법?
OṬṣ0ZL - Link: list of (single-case) characters e.g. codegolf
O - ordinal (vectorises) [99,111,100,101,103,111,108,102]
Ṭ - untruth (1s at those indices) [0,0,0,...,1,1,1,1,1,0,0,0,0,1,0,0,1]
- ^ ^ ^ ^ ^
- i.e. indices: 1 99 103 108 111
0 - literal zero
ṣ - split at [[],[],[],...,[1,1,1,1,1],[],[],[],[1],[],[1]]
Z - transpose [[1,1,1],[1],[1],[1],[1]]
L - length 5
답변
R , 44 43 바이트
소문자 배열에서 작동합니다. 편집 : True 값 테스트에서 바이트에 대한 T / F 곱으로 변경했습니다.
function(x,r=rle(letters%in%x))max(r$l*r$v)
제공된 문자에있는 문자에 대해 실행 길이 인코딩을 수행 한 후 true의 최대 값을 리턴합니다.
답변
APL (Dyalog Classic) , 10 9 바이트
H.PWiz 덕분에 -1 바이트
≢⍉↑⊆⍨⎕a∊⍞
⍞
문자열을 입력
⎕a
대문자 영어 알파벳입니다
⎕a∊⍞
부울 길이-26 벡터-문자열에서 어떤 문자가 발생합니까?
⊆⍨
연속 1의 형태 벡터
≢⍉↑
행렬로 혼합하고, 조옮김하고, 높이를 반환합니다. 효과적으로 1의 가장 긴 벡터의 길이를 찾습니다
답변
펄 6 , 41 바이트
{max values bag .ords.sort.squish Z-0..*}
넓히는:
{ # bare block lambda with implicit param $_
max # find the max
values # get the values from the following Bag (repeat counts)
bag # find the repeats
.ords.sort.squish # get the unique ordinals (method call on $_)
Z- # zip subtract with
0 .. * # Range starting with 0
}
주어진 'stars'
, .ords.sort.squish Z-0..*
반환(97,113,113,113)
답변
하스켈 , 35 바이트
f[]=0
f s=1+f[c|c<-s,elem(succ c)s]
하스켈 , 50 바이트
f s=maximum$scanl(\x c->sum[x+1|elem c s])0['a'..]
답변
자바 스크립트 (Node.js) , 51 바이트
입력 문자열의 경우는 중요하지 않습니다.
s=>(g=_=>s&&1+g(s&=s*2))(Buffer(s).map(c=>s|=1<<c))
방법?
먼저 입력 문자열을 다음을 사용하여 발견 된 문자의 비트 마스크로 변환합니다.
Buffer(s).map(c => s |= 1 << c)
비트 시프트는 암시 적 모듈로 32로 처리됩니다.
예:
"feedback" --> 100001111110
kjihgfedcba-
그런 다음 모든 비트가 지워질 때까지 왼쪽으로 이동 된 복사본으로 반복하여 AND에 ‘비트 마스크에서 연속 1’런을 ‘감소’합니다.
0100001111110 AND 1000011111100 --> 0000001111100
0000001111100 AND 0000011111000 --> 0000001111000
0000001111000 AND 0000011110000 --> 0000001110000
0000001110000 AND 0000011100000 --> 0000001100000
0000001100000 AND 0000011000000 --> 0000001000000
0000001000000 AND 0000010000000 --> 0000000000000
알파벳 순서의 연속 문자 수는 위 프로세스의 반복 횟수입니다. 따라서 재귀 함수 :
g = _ => s && 1 + g(s &= s * 2)
답변
Pyth , 9 바이트
le}#G.:S{
입력은 소문자 문자열로 가정합니다. 여기 에서 온라인으로 시도 하거나 모든 테스트 사례를 한 번에 확인 하십시오 .
le}#G.:S{Q Q=eval(input()), G=lowercase alphabet. Trailing Q inferred.
{Q Deduplicate input string
S Sort it
.: Take all substrings (these are generated in length order)
}#G Filter out those that aren't found in the alphabet
le Find the length of the last remaining element