Longest Substring Without Repeating Characters
Bir dizgede, her karakterin yalnızca bir kez göründüğü ardışık karakter dizilerini ara. coddycode içinde ycode dizisi beş farklı karakter içerir ve tekrar içermeyen daha uzun bir dizi olmadığından yanıt 5'tir.
Olası her diziyi kontrol etmek işe yarar, ancak yavaştır. Daha hızlı bir yöntem, tekrar içermeyen iki konum arasındaki bir pencereyi korur. Sağ kenarı her seferinde bir karakter ilerlet. Yeni karakter pencerenin içindeyse, sol kenarı bu karakterin daha önce görüldüğü yerin hemen ötesine atlat. Her karakterin son konumunu hatırlamak bu atlamayı anında yapar; böylece dize yalnızca bir kez okunur.
lengthOfLongestSubstring adlı bir fonksiyon yazın. Bu fonksiyon bir s dizesi alır ve hiçbir karakterin birden fazla kez geçmediği en uzun alt dizenin (ardışık karakterlerden oluşan bir dizi) uzunluğunu döndürür.
Büyük ve küçük harfler farklı karakterlerdir; bu nedenle a ve A tekrar sayılmaz.
Kısıtlamalar: 1 <= s.length <= 5 * 10^4. s yalnızca İngilizce harfler (küçük ve büyük) ve rakamlar içerir.
Fonksiyon
- arg1string
- Döndürürinteger
Örnekler
- Girdi
- arg1 = "coddycode"
- Çıktı
- 5
- Girdi
- arg1 = "racecar"
- Çıktı
- 4
- Girdi
- arg1 = "a1b2a3b"
- Çıktı
- 5
Gönderirken +12 gizli test
İpuçları
Tek tek açın. Her biri biraz daha fazlasını gösterir.
Bir alt dize, dizenin kesintisiz bir parçasıdır; bu nedenle aynı karakterle iki kez karşılaşmadan kapsayabileceğin en uzun aralığı bulmaya çalışıyorsun.
Sol kenarı ve sağ kenarı olan bir pencere tutun. Sağ kenarını her seferinde bir karakter büyütün ve sol kenarı yalnızca yeni karakter zaten pencerenin içindeyse hareket ettirin.
Her karakterin en son göründüğü dizini saklayın. Yeni karakter en son sol kenarda veya sonrasında görüldüyse, sol kenarı bu dizinin bir ötesine taşıyın. Sol kenar asla geriye gitmez ve cevap, şimdiye kadar sahip olduğunuz en geniş penceredir.
Bu problemin tam çözüm anlatımı yakında geliyor.
Benzer problemler
Aynı fikirleri kullanan problemler. İki üçünü çözmek bir kalıbı kalıcı hale getirir.
Python
def lengthOfLongestSubstring(s):
# Kodu buraya yazınDurum 1
Durum 2
Durum 3
Girdi
arg1 = "coddycode"
Beklenen
5