string - 如何确定字符串的最小公约数?

标签 string algorithm

我在面试时被问到以下问题,并被它难住了。

我遇到的部分问题是要下定决心要解决什么问题。起初我并不认为这个问题在内部是一致的,但后来我意识到它要求你解决两个不同的问题 - 第一个任务是弄清楚一个字符串是否包含另一个字符串的倍数。但第二个任务是在两个字符串中找到更小的除法单元。

现在,随着面试室的压力,我的情况变得更加清晰了,但我仍然不确定这里的理想算法是什么。有什么建议吗?

Given two strings s & t, determine if s is divisible by t.
For example: "abab" is divisible by "ab"
But "ababab" is not divisible by "abab".
If it isn't divisible, return -1.
If it is, return the length of the smallest common divisor:
So, for "abababab" and "abab", return 2 as s is divisible 
by t and the smallest common divisor is "ab" with length 2.

最佳答案

奇怪的是,除非 s 能被 t 整除(这很容易检查),否则系统会要求您返回 -1,然后只剩下 t 整除 s 的情况。

如果t整除s,则最小公约数就是t的最小约数。

找到 t 的最小除数的最简单方法是检查其长度的所有因数,看看该长度的前缀是否能整除 t。

您可以通过构建 t 的 Knuth-Morris-Pratt 搜索表来在线性时间内完成此操作:https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

这将告诉您 t 的所有后缀,同时也是 t 的前缀。如果余数的长度除以 t 的长度,则余数除以 t。

关于string - 如何确定字符串的最小公约数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59549234/

相关文章:

Java 字符串 UTF-8 限制

android - 向布局添加文本?

java 正则表达式 : capitalize words with certain number of characters

string - 在 VBScript 中检查字符串中的非数字字符

c# - 如何为字符串格式提供自定义字符串占位符

algorithm - 在二进制位图中选择最大数量的非重叠 2x2 方 block

javascript - Bresenham 同心圆留下空像素

php - 如何计算两个日期之间的工作日数

algorithm - 动态规划——确定状态

algorithm - 两颗弹珠和一座 100 层的建筑