Palindromic Substrings Leetcode Solution

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Amazon alma Bloomberg Facebook google microsoft Salesforce cuqquldamaq
Dinamik proqramlaşdırma SimBaxılıb 62

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

The Palindromik alt sətirlər LeetCode Həlli – “Palindromik alt sətirlər” sizdən ümumi sayını tapmağı xahiş edir palindromik alt sətirlər giriş sətirində.

Bir simli a palindrom İrəli ilə eyni şəkildə geri oxuduqda.

A alt sətir sətir daxilində bitişik simvollar ardıcıllığıdır.

Misal:

Input:  s = "aaa"
Output: 6

Explanation:

  • Bütün alt sətirlər bunlardır: [a,a,a,aa,aa,aaa].
  • Yuxarıdakı bütün alt sətirlər palindromdur, buna görə də cavab 6-dır.
Input:  s = "abc"
Output: 3

Explanation:

  • Bütün alt sətirlər bunlardır: [a,b,c,ab,bc,abc].
  • Palindromik alt sətirlər bunlardır: [a,b,c]. Beləliklə, cavab 3-dür.

Yanaşma

Idea:

  1. Bu problemi həll etmək üçün əsas fikir istifadə etməkdir dinamik proqramlaşdırma.
  2. [i:j] alt sətirinin palindrom olub-olmadığını saxlayan boolean 2D vektorunu qoruyun.
  3. Biz daha kiçik uzunluqlu alt sətirlər üçün təkrarlayacağıq, sonra daha yüksək uzunluqlu alt sətirlərə keçəcəyik.
  4. dinamik proqramlaşdırma əlaqəsi ilə verilir: dp[i][j]=doğru if s[i]==s[j] və dp[i+1][j-1]==doğrudur.
  5. Boole matrisini doldurduqdan sonra bütün alt sətirlər üçün təkrarlayacağıq və əgər alt sətir palindromdursa, cavabımızı 1 artıracağıq.

Palindromic Substrings Leetcode Solution üçün kod:

C++ Həlli:

class Solution {
public:
    int countSubstrings(string s) {
        int n = s.length();
        vector<vector<bool>> dp(n,vector<bool>(n));
        for(int i=0;i<n;i++){
            dp[i][i] = true;
        }
        for(int L=2;L<=n;L++){
            for(int i=0;i+L<=n;i++){
                int j = i + L - 1;
                if(L==2){
                    dp[i][j] = s[i]==s[j];
                }
                else if(s[i]==s[j] and dp[i+1][j-1]){
                    dp[i][j] = true;
                }
            }
        }
        int ans = 0;
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                ans += dp[i][j];
            }
        }
        return ans;
    }
};

Java Həlli:

class Solution {
    public int countSubstrings(String s) {
        int n = s.length(),res = 0;
        boolean[][] dp = new boolean[n][n];
        for(int i=0;i<n;i++){
            dp[i][i] = true;
        }
        for(int L=2;L<=n;L++){
            for(int i=0;i+L<=n;i++){
                int j = i + L - 1;
                if(L==2){
                    dp[i][j] = s.charAt(i)==s.charAt(j);
                }
                else if(s.charAt(i)==s.charAt(j) && dp[i+1][j-1]){
                    dp[i][j] = true;
                }
            }
        }
        int ans = 0;
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                if(dp[i][j]){
                    ans++;
                }
            }
        }
        return ans;
    }
}

Palindromic Substrings Leetcode Solution üçün Mürəkkəblik Təhlili

Zamanın mürəkkəbliyi

Yuxarıdakı kodun zaman mürəkkəbliyi O (N ^ 2) çünki biz O(N^2) vaxtını alan hər bir alt sətir üçün hərəkət edirik.

Kosmik Mürəkkəblik

Yuxarıdakı kodun kosmik mürəkkəbliyi O (N ^ 2). Hər bir alt sətir üçün cavabları saxlamaq üçün N*N ölçülü 2D vektor hazırlanmışdır.

Referans: https://en.wikipedia.org/wiki/Palindrome

Crack Sistemi Dizayn Müsahibələri
Translate »