Python中查找字符串及其子字符串的总相似度的程序

Python中查找字符串及其子字符串的总相似度的程序

假设我们有一个字符串s。我们需要找出字符串s与它的每个后缀的相似度之和。在这里,两个字符串之间的相似度是两个字符串公共前缀的长度。

因此,如果输入为s =“pqpqpp”,则输出将为11,因为字符串的后缀为“pqpqpp”,“qpqpp”,“pqpp”,“qpp”,“pp”和“p”。这些子字符串与字符串“pqpqpp”的相似度分别为6,0,3,0,1和1。因此,总和为6 + 0 + 3 + 0 + 1 + 1 = 11。

要解决此问题,我们将按照以下步骤进行−

  • length:= s的大小
  • total:=长度
  • z:=包含0的列表
  • l:= 0,r:= 0
  • 对于范围为1到length-1的k,
    • 如果k> r,则
      • match:= 0
      • index:= k
    • 当index<length时,
      • 如果s [index]与s [match]相同,则
      • match:= match + 1
      • index:= index+1
      • 否则,
      • 跳出循环
    • 在z的末尾插入匹配
    • 如果match> 0,则
      • total:= total + match
      • l:= k
      • r:= index-1
    • 否则,
      • 如果z [k-l] <(r-k)+ 1,则
      • 在z的末尾插入z [k-l]
      • total:= total + z [k-l]
      • 否则,
      • match:= r-k
      • index:= r
      • 当index<length时,
        • 如果s [index]与s [match]相同,则
        • match:= match + 1
        • index:= index+1
        • 否则,
        • 跳出循环
      • 在z的末尾插入匹配
      • total:= total+match
      • l:= k
      • r:= index-1
  • 返回总和

示例

让我们看一下以下实现代码以获得更好的理解−

def solve(s):
   length = len(s)
   total = length

   z = [0]
   l = 0
   r = 0

   for k in range(1,length):
      if k > r:
         match=0
         index = k
         while index < length:
            if s[index] == s[match]:
               match +=1
               index +=1
            else:
               break
         z.append(match)
         if match > 0:
            total+=match
            l = k
            r = index-1
      else:
         if z[k-l] < (r-k)+1:
            z.append(z[k-l])
            total+=z[k-l]
         else:
            match = r-k
            index = r
            while index < length:
               if s[index] == s[match]:
                  match +=1
                  index +=1
               else:
                  break
            z.append(match)
            total+=match
            l = k
            r = index-1
   return total

s = "pqpqpp"
print(solve(s))

输入

 "pqpqpp" 

输出

 11 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程