Geteilte Zeichenfolge beim ersten Auftreten jedes Zeichens

45

Verbunden.

Teilen Sie eine druckbare ASCII-Zeichenfolge in eine Liste nicht leerer Zeichenfolgen mit einer neuen Unterzeichenfolge auf, die jedes Mal beginnt, wenn ein Zeichen auftritt, das zuvor nicht im selben Fall gesehen wurde.

Beispiele

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

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

"AAA" → ["AAA"]

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

"" → []


Anekdote : Das Ergebnis wird zwischen 0 und 95 Elemente haben. Die 95 - ten Unterkette notwendigerweise bis zum Ende fortgesetzt werden, da zu diesem Zeitpunkt alle druckbaren ASCII - Zeichen eine Unterkette begonnen haben, so dass jedes zusätzliche Zeichen vor aufgetreten sind und somit kein neues Unterkette beginnen führen kann.

Adam
quelle
1
Ein Beispiel mit "und 'scheint eine gute Idee zu sein.
Emigna
Wäre ""[""]akzeptabel?
Arnauld
5
@Emigna Das verwirrt nur das Beispiel-Ausgabeformat, ohne weitere Klarheit zu bringen.
Adám
1
Kann es bei der Ausgabe als durch Zeilenumbrüche getrennte Zeichenfolge eine führende / nachfolgende Zeile geben?
Wastl
2
@wastl Äh, ich werde es in diesem Fall zulassen, weil es keine leeren Segmente anzeigen kann, obwohl es mit meiner früheren Entscheidung [""], ungültig zu sein, nicht übereinstimmt. Seufzer.
Adám

Antworten:

22

Gelee , 4 Bytes

QƤĠị

Probieren Sie es online!

Erläuterung

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"]

Die interne Darstellung der Strings, die der TIO-Link anzeigt, unterscheidet sich geringfügig.

Zgarb
quelle
10

Netzhaut , 9 Bytes

q1,`.
¶$&

Probieren Sie es online!

Erläuterung

Passen Sie jedes Zeichen an ( .), verwerfen Sie wiederholte Übereinstimmungen ( q), verwerfen Sie die erste Übereinstimmung ( 1,) und fügen Sie einen Zeilenvorschub vor jeder Übereinstimmung ein ¶$&.

Martin Ender
quelle
6

05AB1E , 11 Bytes

ÙSk¥sg¸«£õK

Probieren Sie es online!

Erläuterung

Ù             # 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
quelle
1
Wer auf diese Antwort stößt , ¸«kann ªin der neuen Version von 05AB1E sein.
Kevin Cruijssen
6

C  75   65  63 Bytes

Danke an @Digital Trauma für das Speichern von 10 Bytes und danke an @gastropner und @ l4m2 für das Speichern von jeweils einem Byte!

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

Druckt eine führende Newline.

Probieren Sie es online!

Ohne führende Newline (71 Bytes):

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

Probieren Sie es online!

Steadybox
quelle
1
64 Bytes
Gastropner
@ Gastropner Cleverer Trick; Vielen Dank!
Steadybox
{0}=> {}?
14.
@ l4m2 Ja, danke!
Steadybox
5

Perl 6 ,  58 52  40 Bytes

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

Versuch es

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

Versuch es

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

Probieren Sie es aus
(Eingabe ist eine Liste von Zeichen und Ausgabe ist eine Liste von Listen von Zeichen)

Erweitert:

*                   # 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

Die Ausgabe von classifyist

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

Und .sortverwandelt es einfach in:

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

».value Entfernt die Schlüssel

[
  ['m'],
  ['i'],
  ['s','s','i','s','s','i'],
  ['p','p','i'],
]
Brad Gilbert b2gills
quelle
Warum würden die Schlüssel jemals außer Betrieb sein? Wird die Einfügereihenfolge in Java nicht wie eine HashMapvs. a verfolgt, LinkedHashMapwobei die Reihenfolge auf der Reihenfolge von Speicher vs.
Magic Octopus Urn
1
@MagicOctopusUrn Keine Version von Perl hat Hashes bestellt. Tatsächlich hat Perl 5, Version 18, Hashes zufälliger gemacht, was dazu beiträgt, eine bestimmte Art von Denial-of-Service-Angriff weniger möglich zu machen, und dazu geführt, dass fehlerhafter Benutzercode das fehlerhafte Verhalten häufiger aufdeckt. Jetzt könnte (und muss wahrscheinlich) jemand eine Klasse implementieren, die den Überblick behält, aber das Laden und Verwenden dieser Klasse würde mehr als 5 Zeichen erfordern.
Brad Gilbert b2gills
5

J , 7 Bytes

~:<;.1]

Probieren Sie es online!

Erläuterung

Nubsiebs Chance zu glänzen!

~: <;.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
cole
quelle
2
Ich wollte gerade genau die gleiche (nicht überraschend) Antwort posten. Es ist gut, dass ich mir vorher Ihren Beitrag angesehen habe :)
Galen Ivanov,
2
@GalenIvanov Ich - und ich stelle mir auch die meisten anderen J-Golfer vor - genieße die Möglichkeit, ein Noppensieb zu verwenden oder sich selbst zu klassifizieren.
Cole
5

APL (Dyalog Unicode) , 8 Byte SBCS

(≢¨∪\)⊆⊢

Probieren Sie es online!

ngn
quelle
Aber, aber ... Oh mein Gott.
Adám
Ich habe vermutet, dass Sie diese Herausforderung aufgrund des neuen Grundelements (⊆) gestellt haben. Offensichtlich nicht :)
ngn
Es sieht aus wie eine verlegene Kirby, die eine Babyflasche in der Hand hält.
Magic Octopus Urn
Für alle, die "Kirby" wie ich nachschlagen müssen - es ist ein anthropomorpher rosa Ball aus einem japanischen Videospiel
Uhr
5

05AB1E , 8 Bytes

Ùvyy¶ì.;

Probieren Sie es online!


Wird immer 1 vorangestellte Newline ausgegeben, was konstant ist und keinen Split anzeigt. Die 10-Byte-Alternative, die keine vorangestellte Newline ausgibt, ist Ùvyy¶ì.;}¦. Sie können dies hier versuchen . Laut Adam ist eine vorangestellte oder nachfolgende Zeile akzeptabel.


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']

Nach jeder Iteration erhalten wir:

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

Welches ist:

m
i
ssissi
ppi
Magische Kraken-Urne
quelle
Nett!
Schlagen Sie
@Emigna das war 2 Tage lang ein Kommentar zu deiner Antwort, dann habe ich es gerade gepostet b / c keine Antwort haha: P.
Magic Octopus Urn
Komisch, ich habe keine Benachrichtigung darüber gesehen. Anders genug für eine eigene Antwort :)
Emigna
@Emigna gut, ich meine, ich habe es gelöscht haha.
Magic Octopus Urn
Durch Überspringen der Schleife wird ein Byte gespeichert ÙSD¶ì.;. Ich
bin
5

Haskell , 39 Bytes

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

Probieren Sie es online!

Fügt vor jedem Zeichen, das zum ersten Mal angezeigt wird, ein Zeilenumbruchsymbol ein. Dies führt zu einer durch Zeilenumbrüche getrennten Zeichenfolge mit einem führenden Zeilenumbruch. Bereiten Sie vor lines., um eine Liste zu erstellen.


Haskell , 55 Bytes

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

Probieren Sie es online!

Nimmt wiederholt das Präfix des ersten Zeichens und die darauf folgenden nicht eindeutigen Zeichen.

xnor
quelle
@WheatWizard Hoppla, ja lines.
xnor
Vielleicht möchten Sie tail.linesdie zusätzliche leere Zeichenfolge jetzt entfernen, wenn ich darüber nachdenke.
Weizen-Assistent
4

APL (Dyalog) , 9 Bytes

Danke, Erik der Outgolfer, für das Speichern von 1 Byte!

⊢⊂⍨⍳∘≢∊⍳⍨

Probieren Sie es online!

Erläuterung:

⍳⍨: Ruft für jedes Zeichen den Index seines ersten Auftretens ab. z.Bmississippi -> 1 2 3 3 2 3 3 2 9 9 2

⍳∘≢: Der Bereich von 1 bis zur Länge der Eingabe.

: Mitgliedschaft. z.B1 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

⊢⊂⍨: Partitionieren Sie die Eingabezeichenfolge mit neuen Partitionen, die bei 1s im obigen Vektor beginnen

H.PWiz
quelle
9 Bytes (monadisch fgund monadisch f∘gverhalten sich gleich)
Erik der Outgolfer
Warum statt =?
Adám
Zum Zeitpunkt des Schreibens hatte ich nicht daran gedacht, dass sich die Indizes an den richtigen Positionen befinden würden. Obwohl es klar ist, dass sie sind
H.PWiz
4

Japt , 11 Bytes

‰ r@=iRUbY

Online testen!

Erläuterung

Dies wurde inspiriert durch Magie Octopus Urn ‚s 05AB1E Lösung .

‰ 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.
ETHproductions
quelle
1
Japt hat hier eine Identitätskrise, sie nennt sich aus irgendeinem Grund Ruby. iRUbY!
Magic Octopus Urn
3

JavaScript (ES6), 37 Byte

7 Bytes gespart: ein führender Zeilenumbruch wurde ausdrücklich erlaubt (Danke @Shaggy!)

Nimmt die Eingabe als Array von Zeichen. Gibt eine durch Zeilenumbrüche getrennte Zeichenfolge aus.

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

Testfälle

Arnauld
quelle
3

Brainfuck, 66 Bytes

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

Formatiert:

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

Probieren Sie es online aus

Die führende neue Zeile in der Ausgabe (die nur gedruckt wird, wenn die Eingabe nicht leer ist) kann auf Kosten von 5 Byte entfernt werden, indem xder Hauptteil der (äußersten) Schleife durch ersetzt wird .>,[x].

Mitch Schwartz
quelle
2

K4 , 19 Bytes

Lösung:

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

Beispiele:

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:""
,[""]

Erläuterung:

8 Bytes ist nur zu handhaben ""...

$[#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
quelle
2

Python 2 , 81 74 Bytes

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

Probieren Sie es online!

Stange
quelle
Speichern Sie zwei mit Liste (Satz (Karte (s.find, s)))
Jonathan Allan
@ JonathanAllan es ist ein irreführender Nebeneffekt, sethalten Sie nicht die Ordnung, Gegenbeweis ->s='c'*6+'a'*100+'b'
Rod
Ich weiß, dass wir uns bei zukünftigen Implementierungen nicht darauf verlassen können, aber ich glaube , dass bei gegebenen geordneten Ganzzahlen die Reihenfolge in der Menge beibehalten wird, da der Hash einer Ganzzahl die Ganzzahl ist (wie Sie gezeigt haben, gilt dies nicht für andere Objekte - können Sie feststellen) ein Wort, das mit meiner Alternative nicht funktioniert?).
Jonathan Allan
@ JonathanAllan auch nicht wahr
Rod
Ah, fair genug, mein Glaube war falsch!
Jonathan Allan
2

Perl, 30 Bytes

Enthält +1fürp

Geben Sie in STDIN eine Eingabe ohne Zeilenumbruch ein. Die Ausgabe erfolgt auch ohne Zeilenumbruch:

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

Wenn Sie kümmern sich nicht um führende und neue Zeilen dieses Hinter 25( +3für , -pda der Code enthält ') auch funktioniert:

#!/usr/bin/perl -p
s%%$/x!$v{$'&~v0}++%eg
Tonne Hospel
quelle
Tolle Lösung wie immer! Basierend auf den bereitgestellten Testfällen müssen Sie Ihren Hash nicht benennen, das können Sie ${$&}++. Es ist nicht so robust, könnte aber für diese Herausforderung ausreichen? Es gab auch einen Konsens über Meta, perl -pder kein zusätzliches Byte benötigt, Perl with `-p` sondern nur den Header anstelle von Perl. Ich versuche mich daran zu erinnern, dass ich das selbst mache ...
Dom Hastings
@DomHastings Die Annekdote über höchstens 95 mögliche Zeichenketten impliziert ziemlich stark, dass dies 1gültig ist. In diesem Fall vwird die benötigt. In Bezug auf das Zählen folge ich meistens codegolf.meta.stackexchange.com/a/7539/51507, was für mich der beständigste Meta-Post zum Zählen von Perl ist.
Ton Hospel
Immer schön vom Meister zu lernen. Speziell in diesem Fall &~v0zum Erfassen des ersten Zeichens. Vielen Dank, dass Sie dieser Website beigetreten sind und Ihr langjähriges Fachwissen geteilt haben.
msh210
Sie können Strawberry Perl verwenden, das "anstelle von 'with verwendet wird -e, und dann können Sie das -epals +1 statt +3 zählen. (Getestet.)
msh210
2

JavaScript, 61 54 52 Bytes

Nimmt die Eingabe als Array von Zeichen.

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

Versuch es

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>

Zottelig
quelle
2

R , 94 87 Bytes

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

Probieren Sie es online!

Gibt eine (möglicherweise leere) Liste von Teilzeichenfolgen zurück.

Vielen Dank an Michael M für das Speichern von 7 Bytes!

Giuseppe
quelle
3
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))wäre kürzer - und natürlich ein bisschen hässlicher ...
Michael M
Warum substringstatt substr?
Plannapus
@MichaelM Sehr schön! Ich muss da noch den rein hinzufügen, if(n)da substringwirft ein Fehler bei leerer Zeichenketteneingabe auf.
Giuseppe
1
@plannapus substrgibt einen Längenvektor zurück, der der ersten Eingabe entspricht, während substringder Längenvektor der längsten Eingabe entspricht.
Giuseppe
@ Giuseppe: Das Löschen des "if (n)" in R 3.4.3 ordnet die leere Eingabezeichenfolge "" der leeren Ausgabezeichenfolge "" zu, die in Ordnung sein sollte (?)
Michael M
2

Stax , 8 Bytes

ç↓‼►▐NVh

Online ausführen und debuggen

Die ASCII-Darstellung des gleichen Programms ist dies.

c{[Ii=}(m

Für jedes Zeichen wird geteilt, wenn der Index des aktuellen Zeichens die aktuelle Position ist.

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
rekursiv
quelle
2

> <> , 22 17 14 Bytes

-1 Byte danke an Emigna

i:::a$1g?!o1po

Probieren Sie es online!

Gibt eine führende und eine nachfolgende Zeile aus.

Es verfolgt, welche Buchstaben bereits aufgetaucht sind, indem peine Kopie des Zeichens an der entsprechenden Stelle in der zweiten Zeile eingefügt und eine neue Zeile gedruckt wird, wenn der von dieser Position abgerufene Wert nicht 1 war-1

Scherzen
quelle
Gute Verwendung von g/p! 16 Bytes
Emigna
1

JavaScript (ES6), 68 Byte

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

Übernimmt die Eingabe als Liste von Zeichen.

Testfälle:

Rick Hitchcock
quelle
Ich hatte eine ähnliche Lösung und fragte, ob dies [""]für den letzten Testfall akzeptabel sei. Ist es aber nicht . :-(
Arnauld
Na ja, du hast sowieso eine viel bessere Lösung:)
Rick Hitchcock
1

PHP, 317 Bytes

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;
}

Probieren Sie es online!

Saurabh Chandra Patel
quelle
2
Hallo und willkommen bei PPCG! Ich habe Ihren Beitrag in unserem Standardformat bearbeitet und einen Link zu Try It Online hinzugefügt, damit andere Personen Ihren Code testen können. Das Ziel von Code Golf ist es, den kürzestmöglichen Code zu schreiben, und ich kann ein paar Möglichkeiten finden, dies zu verkürzen, wie kürzere Variablennamen zu verwenden und etwas Leerzeichen wegzulassen. Auf den Seiten mit allgemeinen Tipps und PHP-Tipps finden Sie weitere Ideen.
Kein Baum
1

Rot , 79 Bytes

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

Probieren Sie es online!

Ungolfed:

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 Ivanov
quelle
1

SNOBOL4 (CSNOBOL4) , 115 91 77 Bytes

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

Probieren Sie es online!

Druckt die durch Zeilenumbrüche getrennten Teilzeichenfolgen.

Erläuterung:

line S(for SPLIT) wird eigentlich nicht geteilt, sondern extrahiert das erste Zeichen von Nund speichert es ( .) in Y. Auf Failure springt es zu END. Die Übereinstimmung sollte nur dann fehlschlagen, wenn Ndie Zeichenfolge leer ist. Wenn die Eingabe leer ist, springt sie direkt zu ENDund gibt nichts aus.

S = S Yverkettet Yauf S.

SPAN(S)Stimmt gierig mit einer Reihe von Zeichen in überein Sund sendet sie ( .) an OUTPUT, wobei ( .) Nauf die REMwichtigsten Zeichen von N(falls vorhanden) gesetzt wird. Dann springt es zurück zu S.

Giuseppe
quelle
1

PowerShell, 73 Byte

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

Verwendungszweck

PS> & {$r=@();$h=@{};[char[]]$ARGS[0]|%{if(!($h[$_]++)){$r+=""};$r[-1]+=$_};$r} "mississipi" | ConvertTo-Json -Compress
["m","i","ssissi","pi"]
Don Cruickshank
quelle
Sie können einige Bytes sparen - Probieren Sie es online!
mazzy
1

Ruby , 65 62 58 Bytes

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

Probieren Sie es online!

Ein Lambda, das eine Zeichenfolge akzeptiert und ein Array von Zeichenfolgen zurückgibt.

Vorgehensweise: Hängen Sie für jeden Index entweder das Zeichen an diesem Index san das Ergebnisarray oder an die letzte Zeichenfolge im Ergebnisarray an. String#indexGibt den Index der ersten Instanz des Arguments zurück.

-2 Bytes: Initialisierung aals Splat-Argument statt in einer eigenen Zeile. Vielen Dank, Value Ink !

-1 Byte: Verwenden Sie c=s[i]... cstatt s[i]... s[i]. Vielen Dank, Value Ink !

-4 Bytes: Verwenden Sie .timesanstelle von.map

benj2240
quelle
1

Java 8, 193 169 155 151 Bytes

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 Bytes dank @raznagul (für etwas Offensichtliches habe ich mich irgendwie verpasst ..)
-3 Bytes dank @OOBalance (wieder für etwas Offensichtliches habe ich mich irgendwie verpasst ..: S)

Erläuterung:

Probieren Sie es online aus.

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
quelle
1
Ich glaube nicht, dass du das brauchst if(l<1). Wenn list, sollte 0die Schleife sowieso nicht wie sie 0<0ist ausgeführt werden false.
Rasnagul
@raznagul Nicht sicher, wie ich das verpasst habe, aber Sie haben vollkommen recht! ..>.>
Kevin Cruijssen
Sie setzen i=0zweimal. Sie können 3 Bytes sparen, indem Sie das zweite for(;i<l;i++)
löschen
@OOBalance Ich bin mir nicht sicher, wie das passiert ist.: S Aber danke, dass du es bemerkt hast! :)
Kevin Cruijssen