LyWang

common_substring

Nov 25th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. class Solution:
  2.     """
  3.    @param A: A string
  4.    @param B: A string
  5.    @return: the length of the longest common substring.
  6.    """
  7.  
  8.     def longestCommonSubstring(self, A, B):
  9.         k = 0
  10.         maxlenT = 0
  11.         markA = True
  12.         if len(A) > len(B):
  13.             lt = len(B)
  14.             markA = False
  15.         else:
  16.             lt = len(A)
  17.             markA = True
  18.  
  19.         while k < lt:
  20.             if not markA:
  21.                 if B[k] in A:
  22.                     challenge = self.dothe(A, B[k:])
  23.                     if maxlenT < challenge:
  24.                         maxlenT = challenge
  25.                     k += 1
  26.                 else:
  27.                     k += 1
  28.             else:
  29.                 if A[k] in B:
  30.                     challenge = self.dothe(B, A[k:])
  31.                     if maxlenT < challenge:
  32.                         maxlenT = challenge
  33.  
  34.                     k += 1
  35.                 else:
  36.                     k += 1
  37.         return maxlenT
  38.  
  39.     def dothe(self, Ad, Bd):
  40.         # Write your code here
  41.         maxlen = 0
  42.         if len(Bd) == 0:
  43.             return 0
  44.         lps_target = self.preprocess(Bd)
  45.         index_source = 0
  46.         index_target = 0
  47.         while True:
  48.             if index_target == len(Bd):
  49.                 return maxlen
  50.             if index_source == len(Ad):
  51.                 return maxlen
  52.             if Bd[index_target] == Ad[index_source]:
  53.                 if index_target + 1 > maxlen:
  54.                     maxlen = index_target + 1
  55.                 index_source += 1
  56.                 index_target += 1
  57.             else:
  58.                 if index_target != 0:
  59.                     index_target = lps_target[index_target - 1]
  60.                 else:
  61.                     index_source += 1
  62.  
  63.     def preprocess(self, target):
  64.         if len(target) == 1:
  65.             return [0]
  66.         i = 1  # this tracks the index of substring we are going to discover
  67.         length = 0  # this tracks the length of lps
  68.         lps = [0] * len(target)
  69.         while i < len(target):
  70.             if target[length] == target[i]:
  71.                 lps[i] = length + 1
  72.                 length += 1
  73.                 i += 1
  74.             else:
  75.                 if length == 0:
  76.                     lps[i] = 0
  77.                     i += 1
  78.                 else:
  79.                     length = lps[length - 1]
  80.         return lps
Add Comment
Please, Sign In to add comment