Sonrakı Leetcode Həllidir

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Çiy kərpic Amazon Bloomberg Facebook google microsoft Pinterest Yandex
alqoritmlər kodlaşdırma Dinamik proqramlaşdırma Görməmiş müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutions SimBaxılıb 88

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

Bu problemdə bizə iki fərqli şey verilir strings. Məqsəd ilk simlin a olub olmadığını öyrənməkdir sonradan ikincinin.

Nümunələr

first string = "abc"
second string = "mnagbcd"
true
first string = "burger"
second string = "dominos"
false

Sonrakı Leetcode HəllidirPin

Yanaşma (rekursiv)

İpləri uclarından uyğunlaşdırmağa başlaya biləcəyimizi görmək asandır. Simlərin sonundakı simvollar uyğun gəlirsə, onda orijinalların arasından əldə edilə bilən iki simli tapıb tapmaq problemi azaldılır. sonra son simvollarını atma sonrakı meyarlara uyğundur. Son simvollar uyğun gəlmirsə, əvvəlcədən axtarış etmək üçün yalnız ikinci simlin son simvolunu atırıq.

Bu, hər bir rekursiv zəngdəki simvolları müqayisə etmək üçün simlərin indekslərini parametrlər kimi ötürərək rekursiv şəkildə edilə bilər.

Alqoritm

  1. indeks birinci sətrin son indeksini vərekursiv çağırışlarda ikinci sətrin son indeksini bildirir
  2. If mən == -1:
    1. İlk simdən tamamilə keçdik, qayıt doğru
  3. If j == -1:
    1. İlk simdən tamamilə keçdik, qayıt saxta
  4. If birinci_string [i] == ikinci_string [j]:
    1. rekursiv funksiyaları indekslərlə çağırın (i - 1, j - 1)
  5. Rekursiv funksiyanın nəticəsini indekslərlə qaytarın (i, j - 1)

Is Subsequence Leetcode Həllinin tətbiqi

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;

string S , T;

bool checkSubsequence(int i , int j)
{
    if(i == -1)
        return true;
    if(j == -1)
        return false;
    if(S[i] == T[j])
        return checkSubsequence(i - 1 , j - 1);
    return checkSubsequence(i , j - 1);
}

bool isSubsequence(string s, string t)
{
    S = s , T = t;
    return checkSubsequence((int)s.size() - 1 , (int)t.size() - 1);
}

int main()
{
    string s = "abc";
    string t = "mnagbcd";

    cout << (isSubsequence(s , t) ? "true" : "false") << '\n';
    return 0;
}

Java Proqramı

class is_subsequence
{
    static String S , T;

    public static void main(String args[])
    {
        String a = "abc" , b = "mnagbcd";
        System.out.println((isSubsequence(a , b) ? "true" : "false"));
    }

    static boolean checkSubsequence(int i , int j)
    {
        if(i == -1)
            return true;
        if(j == -1)
            return false;
        if(S.charAt(i) == T.charAt(j))
            return checkSubsequence(i - 1 , j - 1);
        return checkSubsequence(i , j - 1);
    }

    static boolean isSubsequence(String s, String t)
    {
        S = s;
        T = t;
        return checkSubsequence((int)s.length() - 1 , (int)t.length() - 1);
    }
}
true

Is Subsequence Leetcode Həllinin Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (dəq (N, M)) iplərin hər ikisi keçib gedənə qədər təkrarlamaq lazım olduğuna görə. NM simlərin uzunluqlarıdır.

Kosmik Mürəkkəblik

O (min (M, N)) rekursiv zənglər səbəbindən ən pis vəziyyətdə.

Yanaşma (İki Nöqtəli)

Yuxarıdakı texnikanı iki göstəricini saxlayaraq təkrarən istifadə edə bilərik imüvafiq simlərin son indekslərini saxlamaq. Hər ikisi sıfırlanana qədər təkrarlaya bilərik. Əgər i (birinci sətrin göstəricisi) 0-dan böyük və ya ona bərabərdir, birinci simi tamamilə keçə bilmədik və bu səbəbdən ikinci sətir deyil. Əks halda, gerçək qayıdırıq

Alqoritm

  1. İki göstəricini başlatın mən və j hər iki ipin də son göstəricilərinin saxlanılması.
  2. Isə i> = 0 və j> = 0:
    1. Birinci_sır [i] == ikinci_sətr [j] varsa:
      1. i-, j-
    2. Daha
      1. j-
  3. If i > = 0:
    1. Qayıtmaq saxta
  4. Qayıtmaq doğru

Is Subsequence Leetcode Həllinin tətbiqi

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;

string S , T;

bool isSubsequence(string s , string t)
{
    int i = s.size() , j = t.size();

    i-- , j--;

    while(i >= 0 && j >= 0)
    {
        if(s[i] == t[j])
            i-- , j--;
        else
            j--;
    }

    if(i >= 0)
        return false;
    return true;
}

int main()
{
    string s = "abc";
    string t = "mnagbcd";

    cout << (isSubsequence(s , t) ? "true" : "false") << '\n';
    return 0;
}

Java Proqramı

class is_subsequence
{
    static String S , T;

    public static void main(String args[])
    {
        String a = "abc" , b = "mnagbcd";
        System.out.println((isSubsequence(a , b) ? "true" : "false"));
    }

    static boolean isSubsequence(String s , String t)
    {
        int i = s.length() , j = t.length();

        i--;
        j--;

        while(i >= 0 && j >= 0)
        {
            if(s.charAt(i) == t.charAt(j))
            {
                i--;
                j--;
            }
            else
                j--;
        }

        if(i >= 0)
            return false;
        return true;
    }
}
true

Is Subsequence Leetcode Həllinin Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (min (M, N)) kimi təkrarlamağa davam edirik mən və ya j sıfır olur. M və N simlərin uzunluqlarıdır.

Kosmik Mürəkkəblik

O (1) yaddaşda daimi yer istifadə etdikcə.

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