拆分字符串信息的最大相等子字符串数
Splitting a string info maximum number of equal substrings
给定一个字符串,找到最大数量相等子字符串的最优化解决方案是什么?例如,"aaaa"由四个相等的子字符串"a"组成,或者"abab"由两个"ab"组成。但是对于像"abcd"这样的东西,除了"abcd"之外没有任何子字符串,当连接到自身时会构成"abcd"。
检查所有可能的子字符串不是解决方案,因为输入可以是长度为 100 万的字符串。
由于子字符串没有给定的条件,因此找到最大数量的相等子字符串的优化解决方案是计算尽可能短的字符串,字母。创建一个映射并计算字符串的字母。找到具有最大数量的字母。这就是你的解决方案。
编辑:
如果字符串必须仅包含子字符串,则以下代码将计算解决方案
#include <iostream>
#include <string>
using ull = unsigned long long;
int main() {
std::string str = "abab";
ull length = str.length();
for (ull i = 1; (2 * i) <= str.length() && str.length() % i == 0; ++i) {
bool found = true;
for (ull j = 1; (j * i) < str.length(); ++j) {
for (ull k = 0; k < i; ++k) {
if(str[k] != str[k + j * i]) {
found = false;
}
}
}
if(found) {
length = i;
break;
}
}
std::cout << "Maximal number: " << str.length() / length << std::endl;
return 0;
}
此算法检查字符串的头部是否重复,以及字符串是否仅包含头部的重复。
i
循环遍历头部的长度, j
循环遍历每次重复, k
循环遍历子字符串中的每个字符
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 无法从字符串流接收信息
- 在C++中,我想通过使用来自变量(例如字符串)的typename信息,从模板中定义一个类对象
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 有没有办法从字符串中提取某些信息?C++
- 拆分字符串信息的最大相等子字符串数
- 编译器在遇到提取或插入运算符时处理信息(字符串、操纵器等)的顺序是什么?
- 解析来自字符串流的信息
- 如何使用空格将信息放入字符串中?(来自数组)
- 当我的着色器文件的所有信息都被正确读取到字符串中并且语法正确时,OpenGL为什么会出现语法错误
- 无法在C++中找出指针!需要有关基本字符串和指针的信息
- 如何将字符串行作为cl_uint数组和文件详细信息传递给GPGPU
- 使用具有冗余信息的键字符串的映射
- 什么是最快的方式来获得日期,时间和解析成字符串以及一些其他信息
- 从printf格式字符串中提取类型信息
- 存储在异常对象中的信息:在异常中提供字符串
- fscanf,逗号文本文件信息字符串和数字
- 从文件中以字符串格式读取信息
- 如何在结构数组中搜索字符串(名称)并返回该字符串的信息
- 矢量<string>以及映射<字符串,整数> 释放时可能失败? 想知道内存使用情况详细信息