我正在研究我的竞争性编码技能,我遇到了一篇文章,用于计算字符串中每个前缀的出现次数。这是问题陈述给定一个长度为 n 的字符串 s。在问题的第一个变体中,我们要计算每个前缀 s[0…i] 在同一字符串中出现的次数。在问题的第二个变体中,给出了另一个字符串 t,我们想要计算每个前缀 s[0…i] 在 t 中出现的次数。我找到了解决方案。
代码:
for (int i = 0; i < n; i++)
ans[pi[i]]++;
for (int i = n-1; i > 0; i--)
ans[pi[i-1]] += ans[i];
for (int i = 0; i <= n; i++)
ans[i]++;
据我所知前缀是什么,我无法完全理解问题陈述:
例如: string: geekforgeek 前缀为:{g,ge,gee,geek,geekf,geekfo,geekfor,geekforg,geekforge,geekforgee} 作为正确的前缀。有人可以帮我这个问题试图计算什么,因为只有这些是出现一次的可用前缀。提前致谢。