Podziel ciąg przy pierwszym wystąpieniu każdego znaku

45

Związane z.

Biorąc pod uwagę drukowalny ciąg ASCII, podziel go na listę niepustych ciągów z nowym podciąganem rozpoczynającym się za każdym razem, gdy pojawi się znak, który nie był wcześniej widziany w tym samym przypadku.

Przykłady

"mississippi" → ["m","i","ssissi","ppi"]

"P P & C G" → ["P"," P ","& ","C ","G"]

"AAA" → ["AAA"]

"Adam" → ["A","d","a","m"]

"" → []


Anegdota : Wynik będzie miał od 0 do 95 elementów. 95- th podciąg koniecznie kontynuować aż do końca, ponieważ w tym momencie wszystkie drukowane znaki ASCII zaczęły sub-string, więc każda dodatkowa postać będzie mieć miejsce przed, a tym samym nie mogą powodować nowe podciąg zacząć.

Adám
źródło
1
Przykład zawierający "i 'wydaje się dobrym pomysłem.
Emigna
Czy ""[""]byłoby do przyjęcia?
Arnauld
5
@Emigna To tylko bałagan z przykładowym formatem wyjściowym, nie przynosząc żadnej dalszej przejrzystości.
Adám
1
Jeśli dane wyjściowe są ciągami oddzielonymi znakiem nowej linii, to czy może istnieć znak nowej linii wiodącej / końcowej?
wastl
2
@wastl Uh, pozwolę na to w tym przypadku, ponieważ nie może wskazywać pustych segmentów, chociaż koliduje z moim wcześniejszym orzeczeniem, [""]że jest nieważne. Westchnienie.
Adám

Odpowiedzi:

22

Galaretka , 4 bajty

QƤĠị

Wypróbuj online!

Wyjaśnienie

QƤĠị  Input is a string, say s = "adam"
 Ƥ    For each prefix of s: ["a","ad","ada","adam"]
Q     remove duplicates: ["a","ad","ad","adm"]
  Ġ   Group indices by equal values: [[1],[2,3],[4]]
   ị  Index into s: ["a","da","m"]

Wewnętrzna reprezentacja ciągów, które wyświetla łącze TIO, jest nieco inna.

Zgarb
źródło
10

Siatkówka , 9 bajtów

q1,`.
¶$&

Wypróbuj online!

Wyjaśnienie

Dopasuj każdy znak ( .), odrzuć powtarzające się dopasowania ( q), odrzuć pierwsze dopasowanie ( 1,) i wstaw linijkę przed każdym dopasowaniem ¶$&.

Martin Ender
źródło
6

05AB1E , 11 bajtów

ÙSk¥sg¸«£õK

Wypróbuj online!

Wyjaśnienie

Ù             # remove duplicates in input
 S            # split to a list of characters
  k           # get the (first) index of each character in the input
   ¥          # calculate delta's
    sg¸«      # append the length of the input
        £     # split the list into pieces of these sizes
         õK   # remove empty string (for the special case "" -> [])
Emigna
źródło
1
Dla każdego, kto spotka się z tą odpowiedzią, ¸«może być ªw nowej wersji 05AB1E.
Kevin Cruijssen
6

C,  75   65  63 bajtów

Podziękowania dla @Digital Trauma za uratowanie 10 bajtów oraz podziękowania dla @gastropner i @ l4m2 za uratowanie każdego bajtu!

f(char*s){for(int l[128]={};*s;putchar(*s++))l[*s]++||puts(l);}

Drukuje wiodącą nową linię.

Wypróbuj online!

Bez wiodącej nowej linii (71 bajtów):

f(char*s){int l[128]={};for(l[*s]=1;*s;putchar(*s++))l[*s]++||puts(l);}

Wypróbuj online!

Steadybox
źródło
1
64 bajty
gastropner
@gastropner Clever trick; dzięki!
Steadybox
{0}=> {}?
l4m2
@ l4m2 Tak, dziękuję!
Steadybox
5

Perl 6 ,  58 52  40 bajtów

{$/={};.comb.classify({$+=!$/{$_}++}).sort».value».join}

Spróbuj

*.comb.classify({$+=!(%){$_}++}).sort».value».join

Spróbuj

*.classify({$+=!(%){$_}++}).sort».value

Spróbuj
(dane wejściowe to lista znaków, a dane wyjściowe to lista list)

Rozszerzony:

*                   # parameter for WhateverCode lambda

  .classify(        # classify that list
    {
        $           # anonymous scalar state variable (accumulator)

      +=            # increment it if:

        !           # Bool invert the following
          (
            %       # anonymous hash state variable
          ){ $_ }++ # look to see if the character was seen already
    }
  ).sort\           # sort the Pairs by key (makes the order correct)
  ».value           # get the value from each Pair

Dane wyjściowe classifyto

{ # Hash
  1 => ['m'],
  2 => ['i'],
  3 => ['s','s','i','s','s','i'],
  4 => ['p','p','i'],
}

I .sortpo prostu zamienia to w:

[
  1 => ['m'],
  2 => ['i'],
  3 => ['s','s','i','s','s','i'],
  4 => ['p','p','i'],
]

».value usuwa klucze

[
  ['m'],
  ['i'],
  ['s','s','i','s','s','i'],
  ['p','p','i'],
]
Brad Gilbert b2gills
źródło
Dlaczego klucze byłyby nigdy nieczynne? Czy kolejność wstawiania nie śledzone jak HashMapvs. LinkedHashMapJava jeżeli zlecenie jest na podstawie wkładki vs. pamięć kolejności?
Magic Octopus Urn
1
@MagicOctopusUrn Żadna wersja Perla nie zamówiła Hashes. W rzeczywistości wersja 18 Perla 5 sprawiła, że ​​Hashes stał się bardziej randomizowany, co pomaga w mniejszym możliwym typie ataku typu „odmowa usługi”, a także powoduje, że kod użytkownika, który popełnił błąd, częściej ujawnia jego zachowanie. Teraz ktoś może (i prawdopodobnie ma) zaimplementować klasę, która śledzi, ale załadowanie i użycie zajmie więcej niż 5 znaków.
Brad Gilbert b2gills
5

J , 7 bajtów

~:<;.1]

Wypróbuj online!

Wyjaśnienie

Nub sito ma szansę zabłysnąć!

~: <;.1 ]
        ]  Input
~:         Nub sieve (1 if the character is the first instance in string)
    ;.1    Split input on 1s in nub sieve
   <       And box each
kapusta
źródło
2
Miałem właśnie zamieścić dokładnie tę samą (nic dziwnego) odpowiedź, dobrze, że wcześniej zerknąłem na twoje zgłoszenie :)
Galen Iwanow
2
@GalenIvanov Ja - i wyobrażam sobie także większość innych golfistów J - rozkoszuję się możliwością użycia sita nub lub samoklasyfikacji.
cole
5

APL (Dyalog Unicode) , 8 bajtów SBCS

(≢¨∪\)⊆⊢

Wypróbuj online!

ngn
źródło
Ale, ale… Och, mój.
Adám
Podejrzewałem, że mogłeś opublikować to wyzwanie z powodu nowej operacji podstawowej ((). Najwyraźniej nie :)
ngn
Wygląda jak zawstydzona Kirby trzymająca butelkę dla dziecka.
Magic Octopus Urn
dla wszystkich, którzy muszą szukać „Kirby” tak jak ja - to antropomorficzna różowa kula z japońskiej gry wideo
ngn
5

05AB1E , 8 bajtów

Ùvyy¶ì.;

Wypróbuj online!


Zawsze wyświetli 1 poprzedni znak nowej linii, który jest stały i nie wskazuje na podział, 10-bajtowa alternatywa, która nie wyświetla poprzedniego znaku nowej linii Ùvyy¶ì.;}¦, możesz spróbować tutaj . Według Adama dopuszczalny jest poprzedni lub końcowy znak nowej linii.


Input      = mississippi                               | Stack
-----------#-------------------------------------------+----------------------------------
Ù          # Push unique letters of first input.       | ['misp']
 v         # Iterate through each unique letter.       | []
  yy       # Push 2 copies of the letter (or yD)       | ['m','m']
    ¶      # Push a newline char.                      | ['m','m','\n']
     ì     # Prepended to the letter.                  | ['m','\nm']
      .;   # Replace first instance with '\n + letter' | ['\nmississippi']

Po każdej iteracji otrzymujemy:

['\nmississippi'] > ['\nm\nississippi'] > ['\nm\ni\nssissippi'] > ['\nm\ni\nssissi\nppi']

Który jest:

m
i
ssissi
ppi
Urna Magicznej Ośmiornicy
źródło
Miły! Pokonaj mnie dość uczciwie;)
Emigna
@Emigna siedział jako komentarz do twojej odpowiedzi przez 2 dni, a potem właśnie ją opublikowałem b / c brak odpowiedzi haha: P.
Magic Octopus Urn
Dziwne, nie widziałem żadnego powiadomienia na ten temat. Wystarczająco inny, by uzyskać własną odpowiedź :)
Emigna
@ Emigna dobrze, mam na myśli, usunąłem go haha.
Magic Octopus Urn
Pominięcie pętli oszczędza bajt ÙSD¶ì.;. Nie jestem pewien, dlaczego wcześniej o tym nie myśleliśmy: P
Emigna
5

Haskell , 39 bajtów

foldl(\s c->s++['\n'|all(/=c)s]++[c])""

Wypróbuj online!

Wstawia symbol nowej linii przed każdym znakiem, który pojawia się po raz pierwszy, w wyniku czego łańcuch oddzielony nową linią jest poprzedzany nową linią. Przygotuj się lines.do stworzenia listy.


Haskell , 55 bajtów

(""%)
_%[]=[]
p%s|(a,b)<-span(`elem`s!!0:p)s=a:(a++p)%b

Wypróbuj online!

Wielokrotnie pobiera prefiks pierwszego znaku plus znaki, które po nim następują.

xnor
źródło
@WheatWizard Ups, tak lines.
xnor
Może chcę to zrobić, tail.linesaby usunąć dodatkowy pusty ciąg teraz, gdy o tym myślę.
Wheat Wizard
4

APL (Dyalog) , 9 bajtów

Dzięki, Erik Outgolfer za uratowanie 1 bajtu!

⊢⊂⍨⍳∘≢∊⍳⍨

Wypróbuj online!

Wyjaśnienie:

⍳⍨: Dla każdej postaci uzyskaj indeks jej pierwszego wystąpienia. na przykładmississippi -> 1 2 3 3 2 3 3 2 9 9 2

⍳∘≢: Zakres od 1 do długości wejścia.

: Członkostwo. na przykład1 2 3 4 5 6 7 8 9 10 11∊1 2 3 3 2 3 3 2 9 9 2 -> 1 1 1 0 0 0 0 0 1 0 0

⊢⊂⍨: Podziel ciąg wejściowy na nowe partycje zaczynające się na 1s w wektorze powyżej

H.PWiz
źródło
9 bajtów (monadyczny fgi monadyczny f∘gzachowują się tak samo)
Erik the Outgolfer
Dlaczego zamiast =?
Adám
W chwili pisania tego artykułu nie myślałem, że wskaźniki będą na właściwych pozycjach. Chociaż jest jasne, że są
H.PWiz
4

Japt , 11 bajtów

‰ r@=iRUbY

Przetestuj online!

Wyjaśnienie

To był inspirowany przez Magiczny Octopus Urn „s rozwiązania 05AB1E .

‰ r@=iRUbY    Implicit: U = input string
‰             Split U into chars, and keep only the first occurrence of each.
   r@          Reduce; for each char Y in this string...
        UbY      Find the first index of Y in U.
      iR         Insert a newline at this index in U.
     =           Set U to the result.
               As reduce returns the result of the last function call, this gives the
               value of U after the final replacement, which is implicitly printed.
ETHprodukcje
źródło
1
Japt ma tutaj kryzys tożsamości, z jakiegoś powodu nazywa się Ruby. iRUbY!
Magic Octopus Urn
3

JavaScript (ES6), 37 bajtów

Zapisano 7 bajtów: wiodący nowy wiersz został wyraźnie dozwolony (dzięki @Shaggy!)

Pobiera dane wejściowe jako tablicę znaków. Zwraca ciąg oddzielony znakiem nowej linii.

s=>s.map(c=>s[c]=s[c]?c:`
`+c).join``

Przypadki testowe

Arnauld
źródło
Wiodące znaki nowej linii są dozwolone, więc możesz zmniejszyć to do 37 bajtów
Kudłaty
3

pieprzenie mózgu, 66 bajtów

,[>+[<[>+<<-<+>>-]>[>]<<[[+]++++++++++.>>>]<]<[>+<-]>>>[>>]<<-.>,]

Sformatowany:

,
[
  >+
  [
    <[>+< <-<+>>-]
    >[>]
    <<[[+]++++++++++.>>>]
    <
  ]
  <[>+<-]
  >>>[>>]
  <<-.>,
]

Wypróbuj online

Wiodącą nową linię na wyjściu (która jest drukowana tylko wtedy, gdy dane wejściowe nie są puste) można usunąć kosztem 5 bajtów, zastępując korpus xgłównej (najbardziej zewnętrznej) pętli .>,[x].

Mitch Schwartz
źródło
2

K4 , 19 bajtów

Rozwiązanie:

$[#x;(*:'.=x)_;,]x:

Przykłady:

q)k)$[#x;(*:'.=x)_;,]x:"mississippi"
,"m"
,"i"
"ssissi"
"ppi"
q)k)$[#x;(*:'.=x)_;,]x:"P P & C G"
,"P"
" P "
"& "
"C "
,"G"
q)k)$[#x;(*:'.=x)_;,]x:"AAA"
"AAA"
q)k)$[#x;(*:'.=x)_;,]x:"Adam"
,"A"
,"d"
,"a"
,"m"
q)k)$[#x;(*:'.=x)_;,]x:""
,[""]

Wyjaśnienie:

8 bajtów jest po prostu do obsługi ""...

$[#x;(*:'.=x)_;,]x: / the solution
                 x: / save input as variable x
$[  ;         ; ]   / $[condition;true;false]
  #x                / length of x ("" has length 0, i.e. false)
             _      / cut right at left indices
     (      )       / do together
          =x        / group x into key/value (char!indices)
         .          / return value (get indices)
      *:'           / first (*:) each
               ,    / enlist, "" => [""]
streetster
źródło
2

Python 2 , 81 74 bajtów

def f(s):d=sorted(map(s.find,set(s)));print map(lambda a,b:s[a:b],d,d[1:])

Wypróbuj online!

Pręt
źródło
Zapisz dwa z listą (zestaw (mapa (s.find, s)))
Jonathan Allan
@JonathanAllan to wprowadzający w błąd efekt uboczny, setnie zachowuj porządku, kontr-dowód ->s='c'*6+'a'*100+'b'
Rod
Wiem, że nie możemy na tym polegać w przyszłych implementacjach, ale uważam, że biorąc pod uwagę uporządkowane liczby całkowite, utrzymujemy porządek w zestawie ze względu na skrót liczby całkowitej będącej liczbą całkowitą (jak pokazałeś, to samo nie dotyczy innych obiektów - czy możesz znaleźć słowo, które nie działa z moją alternatywą?).
Jonathan Allan
@JonathanAllan też nie jest prawdą
Rod
Ach, słusznie, moje przekonanie było fałszywe!
Jonathan Allan
2

Perl, 30 bajtów

Obejmuje +1dlap

Podaj dane wejściowe bez końcowego znaku nowej linii na STDIN. Wyjście również nie ma końca nowej linii:

echo -n adam | perl -pE 's%.%$v{$&}+++!pos?$&:$/.$&%eg'; echo

Jeśli nie dbają o początkowe i końcowe znaki nowej linii to 25( +3dla -pponieważ kod zawiera ') działa również:

#!/usr/bin/perl -p
s%%$/x!$v{$'&~v0}++%eg
Ton Hospel
źródło
Świetne rozwiązanie jak zawsze! Na podstawie podanych przypadków testowych nie musisz nazywać swojego skrótu, możesz to zrobić ${$&}++. Nie jest tak solidny, ale może wystarczyć na to wyzwanie? Ponadto, istnieje zgoda co do meta, perl -pktóra nie wymaga dodatkowego bajtu, wystarczy mieć nagłówek, a Perl with `-p` nie tylko Perl. Staram się pamiętać, aby zrobić to sam ...
Dom Hastings,
@DomHastings Anegdota o maksymalnie 95 możliwych ciągach dość mocno sugeruje, że 1jest poprawna, w którym to przypadku vjest potrzebna. Jeśli chodzi o liczenie, najczęściej podążam za codegolf.meta.stackexchange.com/a/7539/51507, który jest dla mnie najbardziej spójnym meta postem na temat liczenia perla.
Ton Hospel,
Zawsze miło jest uczyć się od mistrza. W szczególności w tym przypadku &~v0za złapanie pierwszej postaci. Dziękujemy za dołączenie do tej witryny i podzielenie się swoją wieloletnią wiedzą.
msh210
Możesz użyć Strawberry Perl, który używa "zamiast 'z -e, a następnie możesz policzyć -epjako +1 zamiast +3. (Testowane.)
msh210,
2

JavaScript, 61 54 52 bajtów

Pobiera dane wejściowe jako tablicę znaków.

s=>s.map(x=>a[x]?a[y]+=x:a[x]=a[++y]=x,a=[],y=-1)&&a

Spróbuj

o.innerText=JSON.stringify((f=
s=>s.map(x=>a[x]?a[y]+=x:a[x]=a[++y]=x,a=[],y=-1)&&a
)([...i.value=""]));oninput=_=>o.innerText=JSON.stringify(f([...i.value]))
<input id=i><pre id=o></pre>

Kudłaty
źródło
2

R , 94 87 bajtów

function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))

Wypróbuj online!

Zwraca (ewentualnie pustą) listę podciągów.

Podziękowania dla Michaela M za oszczędność 7 bajtów!

Giuseppe
źródło
3
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))byłby krótszy - i oczywiście nieco brzydszy ...
Michael M
Dlaczego substringzamiast substr?
plannapus
@MichaelM Very nice! Nadal muszę tam dodać, if(n)ponieważ substringzgłasza błąd przy wprowadzaniu pustego ciągu.
Giuseppe,
1
@plannapus substrzwraca wektor o długości równej jego pierwszemu wejściu, podczas gdy substringzwraca jeden o długości równej najdłuższemu ze swoich danych wejściowych.
Giuseppe,
@Giuseppe: Upuszczenie „if (n)” w R 3.4.3 odwzorowuje pusty ciąg wejściowy „” na pusty ciąg wyjściowy „”, co powinno być w porządku (?)
Michael M
2

Stax , 8 bajtów

ç↓‼►▐NVh

Uruchom i debuguj online

Oto reprezentacja ascii tego samego programu.

c{[Ii=}(m

Dla każdego znaku dzieli się, gdy indeks bieżącego znaku jest bieżącą pozycją.

c            copy the input
 {    }(     split the string when the result of the enclosed block is truthy
  [          duplicate the input string under the top of the stack
   I         get the character index of the current character
    i=       is it equal to the iteration index?
        m    print each substring
rekurencyjny
źródło
2

> <> , 22 17 14 bajtów

-1 bajt dzięki Emignie

i:::a$1g?!o1po

Wypróbuj online!

Drukuje wiodący i końcowy znak nowej linii.

Śledzi, które litery już się pojawiły, pwstawiając kopię znaku w odpowiednim miejscu w drugim rzędzie i drukując nowy wiersz, jeśli wartość pobrana z tej pozycji nie wynosiła 1. Kończy się błąd podczas próby drukowania-1

Jo King
źródło
Świetne wykorzystanie g/p! 16 bajtów
Emigna
1

JavaScript (ES6), 68 bajtów

s=>s.map(c=>o[c]?t+=c:(t&&m.push(t),t=o[c]=c),t='',o=m=[])&&[...m,t]

Pobiera dane wejściowe jako listę znaków.

Przypadki testowe:

Rick Hitchcock
źródło
Miałem podobne rozwiązanie i zapytałem, czy [""]jest akceptowalny w ostatnim przypadku testowym. Ale tak nie jest . :-(
Arnauld
No cóż, i tak masz znacznie lepsze rozwiązanie:)
Rick Hitchcock
1

PHP, 317 bajtów

function SplitOnFirstUnique($s){
    $len = strlen($s); 
    $output = [];
    $newstring = '';
    for ($i=0; $i < $len ; $i++) { 
        $newstring = $newstring.$s[$i];
        if(!in_array($s[$i] , $output  )){
            $output[] = $newstring;
            $newstring = '';
        }
    }
    return $output;
}

Wypróbuj online!

Saurabh Chandra Patel
źródło
2
Witaj i witaj w PPCG! Zmodyfikowałem Twój post do naszego standardowego formatu i dodałem link do Wypróbuj online, aby inne osoby mogły przetestować Twój kod. Celem Code Golf jest napisanie możliwie najkrótszego kodu, i widzę kilka sposobów na jego skrócenie, na przykład użycie krótszych nazw zmiennych i pominięcie niektórych białych znaków. Możesz sprawdzić ogólne porady i strony ze wskazówkami PHP, aby uzyskać więcej pomysłów.
Nie drzewo,
1

Czerwony , 79 bajtów

func[s][foreach c next unique/case append s"^@"[print copy/part s s: find s c]]

Wypróbuj online!

Nie golfowany:

f: func [s] [
    b: next unique/case append s "^@"  ; append `null` to the end of the string, than
                                       ; find the unique characters and 
                                       ; store all except the first to b  
    foreach c b [                      ; for each character in b
        print copy/part s s: find s c  ; print the part of the string to
                                       ; where the character is found and
                                       ; set the beginning of the string to that position
    ]
] 
Galen Iwanow
źródło
1

SNOBOL4 (CSNOBOL4) , 115 91 77 bajtów

	N =INPUT
S	N LEN(1) . Y	:F(END)
	S =S Y
	N SPAN(S) . OUTPUT REM . N	:(S)
END

Wypróbuj online!

Drukuje podciągi oddzielone znakami nowej linii.

Wyjaśnienie:

line S(for SPLIT) tak naprawdę nie dzieli, ale zamiast tego wyodrębnia pierwszy znak Ni zapisuje go ( .) Y. W Fchorobie skacze do END. Dopasowanie powinno zakończyć się niepowodzeniem tylko wtedy, gdy Njest pusty ciąg. Zatem, gdy wejście jest puste, przeskakuje bezpośrednio ENDi nic nie wyprowadza.

S = S Yłączy Ysię z S.

SPAN(S)łapczywie dopasowuje ciąg znaków do Si przesyła go ( .) do OUTPUT, setting ( .) Ndo REMchorych znaków N(jeśli są). Potem skacze z powrotem do S.

Giuseppe
źródło
1

PowerShell, 73 bajty

{$r=@();$h=@{};[char[]]$ARGS[0]|%{if(!($h[$_]++)){$r+=""};$r[-1]+=$_};$r}

Stosowanie

PS> & {$r=@();$h=@{};[char[]]$ARGS[0]|%{if(!($h[$_]++)){$r+=""};$r[-1]+=$_};$r} "mississipi" | ConvertTo-Json -Compress
["m","i","ssissi","pi"]
Don Cruickshank
źródło
możesz zaoszczędzić trochę bajtów - wypróbuj online!
mazzy
1

Rubin , 65 62 58 bajtów

->s,*a{s.size.times{|i|(i==s.index(c=s[i])?a:a[-1])<<c}
a}

Wypróbuj online!

Lambda akceptuje ciąg i zwraca tablicę ciągów.

Podejście: do każdego indeksu dołącz znak z tego indeksu sdo tablicy wyników lub do ostatniego ciągu w tablicy wyników. String#indexzwraca indeks pierwszej instancji argumentu.

-2 bajty: Zainicjuj ajako argument ikona zamiast we własnej linii.Dzięki, Value Ink !

-1 bajt: Użyj c=s[i]... czamiast s[i]... s[i].Dzięki, Value Ink !

-4 bajty: użyj .timeszamiast.map

benj2240
źródło
1

Java 8, 193 169 155 151 bajtów

s->{for(int l=s.length(),i=0,j;i<l;i++)if(s.indexOf(s.charAt(i))==i){for(j=i;++j<l&&s.indexOf(s.charAt(j))!=j;);System.out.println(s.substring(i,j));}}

-14 bajtów dzięki @raznagul (za coś oczywistego, że jakoś za mną tęskniłem)
-3 bajtów dzięki @OOBalance (ponownie za coś oczywistego, że jakoś tęskniłem za sobą ..: S)

Wyjaśnienie:

Wypróbuj online.

s->{                    // Method with String parameter and no return-type
  for(int l=s.length(), //  The length of the input-String
          i=0,j;        //  Index integers
      i<l;i++)          //  Loop `i` from 0 to `l` (exclusive)
    if(s.indexOf(s.charAt(i))==i){
                        //   If the character at index `i` hasn't occurred yet:
      for(j=i;++j<l     //    Inner loop `j` from `i` to `l` (exclusive),
          &&s.indexOf(s.charAt(j))!=j;);
                        //     as long as the character at index `j` has already occurred
      System.out.println(//    Print:
        s.substring(i,j));}}
                        //     The substring of the input from index `i` to `j` (exclusive)
Kevin Cruijssen
źródło
1
Nie sądzę, że potrzebujesz if(l<1). Jeśli ltak, 0pętla nie powinna być wykonywana tak jak 0<0jest false.
raznagul
@raznagul Nie wiem, jak mi tego brakowało, ale masz całkowitą rację! ..>.>
Kevin Cruijssen
Ustawiasz i=0dwa razy. Możesz zapisać 3 bajty, upuszczając drugi:for(;i<l;i++)
OOBalance
@OOBalance Nie jestem pewien, jak to się stało ..: S Ale dziękuję za zauważenie! :)
Kevin Cruijssen