Ardıcıl Simvollar LeetCode Həlli

Çətinlik səviyyəsi Asan
Tez-tez soruşulur alma google microsoft YandexBaxılıb 22

Problem bəyanat

Ardıcıl Simvollar LeetCode Həlli – The güc sətri yalnız bir unikal simvol ehtiva edən boş olmayan alt sətirin maksimum uzunluğudur.

s sətri verilmişdir, qayıt bu güc of s.

Ardıcıl Simvollar LeetCode HəlliPin

Input: s = "leetcode"
Output: 2
Explanation: The substring "ee" is of length 2 with the character 'e' only.

Izahat

ilə ən uzun alt sətiri tapmalıyıq eyni personajlar.

Verilmiş sətir üzərində təkrarlaya və dəyişəndən istifadə edə bilərik count həmin alt sətirin uzunluğunu qeyd etmək üçün.

Növbəti simvol əvvəlki ilə eyni olduqda, artırırıq count bir tərəfindən. Əks halda sıfırlayırıq count 1 üçün.

Bu üsulla eyni simvollarla alt sətirin sonuna çatdıqda, count sıfırladığımız üçün həmin alt sətirin uzunluğu olacaq count həmin alt sətir başlayanda və artırın count həmin alt sətri təkrarlayanda.

Biz nə etməliyik?

Cari simvol əvvəlki ilə eynidirsə, sayğacı 1 artırın; əks halda, sayğacı 1-ə sıfırlayın;

Hər iterasiya zamanı sayğacın maksimum dəyərini yeniləyin.

Niyə sayğac 1-ə sıfırlanır?

Əgər cari simvol əvvəlkinə bərabər deyilsə, bu o deməkdir ki, cari alt sətirdə birdən çox unikal simvol mövcuddur, beləliklə, biz bundan sonra aşağıdakı sətirləri yenidən yoxlamaq üçün sayğacı 1-ə sıfırlayırıq.

Kodu

Ardıcıl simvollar üçün C++ kodu

class Solution {
public:
    int maxPower(string s) {
        // support variables
        int res = 0, i = 0, j, len = s.size(), curr = s[0];
        while (i < len) {
            // updating j
            j = i + 1;
            // moving j to the first value of s[j] != curr
            while (j < len && curr == s[j]) j++;
            // updating res
            res = max(res, j - i);
            // setting curr and i for the next loop
            curr = s[j];
            i = j;
        }
        return res;
    }
};

Ardıcıl simvollar üçün Java kodu

class Solution {
    public int maxPower(String s) {
         int ans = 1;
        for (int i = 1, cnt = 1; i < s.length(); ++i) {
            if (s.charAt(i) == s.charAt(i - 1)) {
                if (++cnt > ans) {
                    ans = cnt;
                }
            }else {
                cnt = 1;
            }
        }
        return ans;
    }
    
}

Ardıcıl simvollar üçün Python kodu

class Solution:
     def maxPower(self, s: str) -> int:
        cnt = ans = 1
        for i in range(1, len(s)):
            if s[i] == s[i - 1]:
                cnt += 1
                ans = max(cnt, ans)
            else:
                cnt = 1
        return ans

 

Ardıcıl simvollar üçün mürəkkəblik təhlili LeetCode Həlli

Zaman: O(n), Məkan: O(1), burada n = s.uzunluq()

Referans: https://en.wikipedia.org/wiki/String_(computer_science)

Şərh yaz

Translate »