So teilen Sie Buchstabenintervalle in PHP auf

醉折花枝作酒筹
Freigeben: 2023-03-11 10:26:01
nach vorne
2127 Leute haben es durchsucht

Die Zeichenfolge S besteht aus Kleinbuchstaben. Wir müssen diese Zeichenfolge in so viele Segmente wie möglich unterteilen, und derselbe Buchstabe erscheint nur in einem der Segmente. Gibt eine Liste zurück, die die Länge jedes Zeichenfolgenfragments darstellt. Heute stellen wir die Methode zur Aufteilung von Buchstabenintervallen vor.

So teilen Sie Buchstabenintervalle in PHP auf

Dividieren Sie das Buchstabenintervall

String S besteht aus Kleinbuchstaben. Wir müssen diese Zeichenfolge in so viele Segmente wie möglich unterteilen, und derselbe Buchstabe erscheint nur in einem der Segmente. Gibt eine Liste zurück, die die Länge jedes Zeichenfolgenfragments darstellt.

Beispiel 1:

输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
Nach dem Login kopieren

Tipps: Die Länge von

S liegt zwischen [1, 500]. S enthält nur Kleinbuchstaben „a“ bis „z“.

Ideen zur Problemlösung 1

Wenn Sie schneiden möchten, müssen Sie zwei Zeiger haben, den ersten und den letzten. Sobald Sie den Endzeiger bestimmt haben, können Sie den Startzeiger des nächsten Schnitts bestimmen. Durchlaufen Sie die Zeichenfolge. Wenn alle Zeichen im gescannten Teil nur im gescannten Bereich erscheinen, können Sie sie ausschneiden. Die gescannten grünen Zeichen im Bild unten entsprechen nicht der am weitesten entfernten Position jenseits von 8. Wenn Sie bei 8 schneiden, werden die Zeichen [0:8] an keiner anderen Stelle angezeigt.

behalten Sie „Die am weitesten entfernte Position, zu der die gescannten Zeichen gelangen können“. Beim Scannen an diese Position werden die ausgeschnittenen Zeichen später nicht angezeigt. Aktualisieren Sie den Startzeiger und bereiten Sie sich auf den nächsten Schnitt vor.

Einige Variablen

maxPos Eine Karte, die die am weitesten entfernte Position jedes Buchstabens aufzeichnet. Start ist die Startposition des Schneidens. scannenCharMaxPos Die am weitesten entfernte Position, zu der die gescannten Zeichen gehen können.

class Solution {
    /** 
    * @param String $S 
    * @return Integer[] 
    */
    function partitionLabels($S) {
        $maxPos = [];
        $length = strlen($S);
        for ($i = 0; $i < $length; $i++) { // 存放字母与它的最远位置
            $maxPos[$S[$i]] = $i;
        }
        $res = [];
        $start = 0;                        // 待切割的起始位置
        $scannedCharMaxPos = 0;            // 已扫描的字符中最远的位置
        for ($i = 0; $i < $length; $i++) {
            $curCharMaxPos = $maxPos[$S[$i]]; // 当前扫描的字符的最远位置
            $scannedCharMaxPos = max($scannedCharMaxPos, $curCharMaxPos); // 更新「已扫描的字符中最远的位置」
            if ($i == $scannedCharMaxPos) { // 正好扫描到「已扫描的字符的最远位置」,到达切割点
                $res[] = $i - $start + 1;
                $start = $i + 1;              // 更新,下一个待切割的字符串的起始位置
            }
        }
        return $res;
    }}
Nach dem Login kopieren

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo teilen Sie Buchstabenintervalle in PHP auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:hxd.life
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage