לאָנגעסט ריפּיטיד סאַבסאַקוואַנס


שוועריקייט לעוועל מיטל
אָפט געבעטן אין אַמאַזאָן אַרסעסיאַם אַוואַלאַראַ ביטעדאַנסע Capital One facebook MetLife
ביינערי זוכן דינאַמיש פּראָגראַממינג האַש שטריקל

די פּראָבלעם "לאָנגעסט ריפּיטיד סאַבסאַקוואַנס" שטאַטן אַז איר באַקומען אַ שטריקל ווי אַ אַרייַנשרייַב. דערוויסן די לאָנגעסט ריפּיטיד סאַבסטאַנסאַז, דאָס איז די סאַבסאַקוואַנס וואָס יגזיסץ צוויי מאָל אין די שטריקל.

בייַשפּיל

לאָנגעסט ריפּיטיד סאַבסאַקוואַנס

aeafbdfdg
3 (afd)

צוגאַנג

דער פּראָבלעם פרעגט אונדז צו געפֿינען די לאָנגעסט ריפּיטיד סאַבסטאַנסאַז אין די שטריקל. צו דערמאָנען, אַ סאַבסטאַנסאַז איז אַ שטריקל וואָס איר האָט לינקס אויב איר ויסמעקן עטלעכע פון ​​די אותיות פון די שטריקל. אַזוי, אַ נאַיוו צוגאַנג קען זיין די דור פון אַלע סאַבסטאַנסיז. נאָך דער דור פון דער סאַבסאַקוואַנס, מיר אָנהייבן צו קאָנטראָלירן צי אַ סאַבסאַקוואַנס באַפרידיקן אונדזער פאָדערונג אָדער נישט. אָבער דער דור פון אַ סאַבסאַקוואַנס איז אַ צייט-קאַנסומינג פּראָצעס. אזוי מיר דאַרפֿן צו טראַכטן פון קיין אנדערע צוגאַנג אַנשטאָט פון דזשענערייטינג די סאַבסטאַנסיז.

די אנדערע זאַך מיר קענען טאָן איז נוצן דינאַמיש פּראָגראַממינג. די פּראָבלעם איז אַ קליין ווערייישאַן איבער די לאָנגעסט פּראָסט סאַבסאַקוואַנס. עס זענען צוויי ענדערונגען. ערשטער, אַנשטאָט פון צוויי סטרינגס, מיר אַרבעטן אויף אַ איין שטריקל. און די אנדערע זאַך איז אויך פארבונדן צו דער ערשטער פאַקט. זינט מיר אַרבעטן אויף אַ איין שטריקל און וועלן אַז די סאַבסטאַנסאַז זאָל זיין ריפּיטיד. מיר דאַרפֿן צו אויסקלייַבן די אותיות וואָס זאָל זיין אַנדערש אויסשליסלעך אין ביידע סאַבסאַקוואַנס וואָס איז די אינדעקס פון אותיות. אַזוי פאָרמאַלי גערעדט, מיר וועלן רופן די זעלבע פונקציע צו געפֿינען די לאָנגעסט פּראָסט סאַבסאַקוואַנס, אָבער אַנשטאָט פון דורכגיין די רגע שטריקל. מיר פאָרן די זעלבע שטריקל ווי דער ערשטער און רגע אַרגומענט מיט אַ באַדינג אַז דער אינדעקס פֿאַר די זעלבע אותיות זאָל זיין אַנדערש.

C ++ קאָד צו געפֿינען לאָנגעסט ריפּיטיד סאַבסאַקוואַנס

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  string s = "aeafbdfdg";
    int n = s.length();
  int dp[n][n];memset(dp, 0, sizeof dp);
  for (int i=0;i<n;i++){
    for (int j=0;j<n;j++){
      if (s[i]==s[j] && i != j) 
        dp[i][j] = 1 + ((i>0 && j>0) ? dp[i-1][j-1] : 0);
      else
        dp[i][j] = max(((j>0) ? dp[i][j-1] : 0), ((i>0) ? dp[i-1][j] : 0));
    }
  }
    cout<<dp[n-1][n-1];
}
3

דזשאַוואַ קאָד צו געפֿינען לאָנגעסט ריפּיטיד סאַבסאַקוואַנס

import java.util.*;
class Main{
  public static void main(String[] args)
  {
    String s = "aeafbdfdg";
      int n = s.length();
    int dp[][] = new int[n+1][n+1]; 
    for (int i=0; i<=n; i++) 
      for (int j=0; j<=n; j++) 
        dp[i][j] = 0;
    for (int i=0;i<n;i++){
      for (int j=0;j<n;j++){
        if (s.charAt(i)==s.charAt(j) && i != j) 
          dp[i][j] = 1 + ((i>0 && j>0) ? dp[i-1][j-1] : 0);
        else
          dp[i][j] = Math.max(((j>0) ? dp[i][j-1] : 0), ((i>0) ? dp[i-1][j] : 0));
      }
    }
    System.out.print(dp[n-1][n-1]);
  }
}
3

קאַמפּלעקסיטי אַנאַליסיס

צייט קאַמפּלעקסיטי

אָ (N ^ 2), ווייַל דעם צוגאַנג איז די זעלבע ווי די לאָנגעסט קאָממאָן סאַבסאַקוואַנס פּראָבלעם. די צייט קאַמפּלעקסיטי איז אויך ענלעך צו דעם.

ספעיס קאַמפּלעקסיטי

אָ (N ^ 2), ווייַל מיר האָבן צו שאַפֿן אַ 2 ד דפּ טיש. אזוי די פּלאַץ קאַמפּלעקסיטי איז אויך פּאַלינאָומיאַל.