当前位置: 首页 > 编程笔记 >

C ++中字符串及其所有后缀的相似性总和

公西俊德
2023-03-14
本文向大家介绍C ++中字符串及其所有后缀的相似性总和,包括了C ++中字符串及其所有后缀的相似性总和的使用技巧和注意事项,需要的朋友参考一下

在这个问题中,我们得到了字符串str。我们的任务是创建一个程序,以查找字符串及其所有后缀的相似度之和。

字符串str的后缀是通过消除字符串的起始字符创建的所有字符串。

字符串str1和str2的相似之处是两个字符串共有的最长前缀的长度。例如,str1 ='abbac'和str2 ='abb'为3。

而str1 ='abca'和str2 ='ca'为0。从开始算起。

让我们举个例子来了解这个问题,

输入-str ='xyxyx'

输出-

说明-所有子字符串以及带有所有后缀的字符串的相似性为-

‘xyxyx’ -> 5
‘yxyx’ -> 0
‘xyx’ -> 3
‘yx’ -> 0
‘x’ -> 1
Sum = 5 + 0 + 3 + 0 + 1 = 9

为了解决这个问题,我们将使用Z算法并计算Z数组。Z数组是一个长度等于字符串长度的数组。每个元素都存储str的前缀。下面的程序显示了实现,

示例

#include <bits/stdc++.h>
using namespace std;
void createZArray(string str, int n, int Zarray[]) {
   int L, R, k;
   L = R = 0;
   for (int i = 1; i < n; ++i) {
      if (i > R) {
         L = R = i;
         while (R < n && str[R - L] == str[R])
            R++;
         Zarray[i] = R - L;
         R--;
      }
      else {
         k = i - L;
         if (Zarray[k] < R - i + 1)
         Zarray[i] = Zarray[k];
         else {
            L = i;
            while (R < n && str[R - L] == str[R])
            R++;
            Zarray[i] = R - L;
            R--;
         }
      }
   }
}
int calSumSimilarities(string s, int n) {
   int Zarray[n] = { 0 };
   createZArray(s, n, Zarray);
   int total = n;
   for (int i = 1; i < n; i++)
      total += Zarray[i];
   return total;
}
int main() {
   string s = "xyxyx";
   int n = s.length();
   cout<<"Sum of similarities of string with all of its suffixes is "<<calSumSimilarities(s, n);
   return 0;
}

输出结果

Sum of similarities of string with all of its suffixes is 9
 类似资料:
  • 本文向大家介绍C ++中的相似字符串组,包括了C ++中的相似字符串组的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个字符串X和Y,如果可以交换X的两个字母,它们是相似的,因此等于Y。另外,如果两个字符串X和Y相等,则它们相似。例如,考虑两个字符串,例如“ tars”和“ rats”相似,如果我们交换t和r,则可以找到另一个,现在“ rats”和“ arts”相似,但是“ star”不同类

  • 本文向大家介绍C ++中的K相似字符串,包括了C ++中的K相似字符串的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个字符串A和B。如果我们可以将A中的两个字母的位置恰好交换K次,使得结果字符串为B,那么这两个字符串是K相似的(其中K是一个非负整数)。在两个字谜A和B之间,我们必须找到与A和B类似的最小K。 因此,如果输入类似于A =“ abc”,B =“ bac”,则输出将为2。 为了解

  • 问题内容: 我已经看到了关于获取所有可能的子字符串(即相邻字符集)的许多问题,但是对于生成所有可能的字符串(包括其子字符串的组合)都没有疑问。 例如,让: 我希望输出是这样的: 要点是,我们可以删除原始字符串中不相邻的多个字符(以及相邻的字符)。 到目前为止,这是我尝试过的: 但是,这只会从原始字符串中删除相邻字符串的集合,而不会返回上例中的元素。 另一个示例是,如果我们使用字符串,则输出列表应包

  • 问题内容: 我有一组字符串,例如 我只是想找到这些字符串中最长的公共部分,这里是前缀。在上面的结果应该是 琴弦 应该导致前缀 Python中是否有一种相对轻松的方法来确定前缀(而不必手动遍历每个字符)? PS:我正在使用Python 2.6.3。 问题答案: 永远不要重写提供给您的内容: 返回最长的路径前缀(一个字符一个字符),它是列表中所有路径的前缀。如果列表为空,则返回空字符串()。请注意,这

  • 本文向大家介绍C#计算2个字符串的相似度,包括了C#计算2个字符串的相似度的使用技巧和注意事项,需要的朋友参考一下 计算字符串相似度,直接来C#代码 返回结果就是相似度了,验证码识别上用的到 爱给模板网提供 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我想将多个字符串相互比较,并找到最相似的字符串。我想知道是否有任何库,方法或最佳实践会返回我哪些字符串与其他字符串更相似的字符串。例如: “The quick fox jumped” -> “The fox jumped” “The quick fox jumped” -> “The fox” 该比较将返回第一个比第二个更相似。 我想我需要一些方法,例如: 某处有这样的东西吗? 编辑: