【问题标题】:Find shortest prefix in a string in C [closed]在C中的字符串中查找最短前缀[关闭]
【发布时间】:2017-05-22 04:28:16
【问题描述】:

我是 C 新手,非常感谢您在代码方面的帮助。 我需要动态分配一个数组并检查字符串中哪个前缀是最短的,它的连接构建字符串,并打印它和它的长度。

以下是一些输出示例:

  1. 对于“ababab”,输出应为:长度为 2 的“ab”
  2. 对于“aaaa”,输出应为:长度为 1 的“a”
  3. 对于“abcaabca”,输出应为:长度为 4 的“abca”
  4. 对于“abcdefg”,输出应为:长度为 7 的“abcdefg”
  5. 对于“acacaac”,输出应该是长度为 7 的“acacaac”

我的问题是我不知道如何构建应有的功能。字符串只包含同一个字母,或者所有字母互不相同的情况都可以,但是我不知道如何处理所有其他情况。

我不能在这段代码中使用另一个字符串,但我可以使用其他指针 来帮助我。

谢谢

【问题讨论】:

  • 你真的需要开始写一些代码了。您发布的问题过于宽泛,实际上要求我们为您编写代码。
  • 这个网站不适合做作业。

标签: c string concatenation


【解决方案1】:

你说你不能使用另一个字符串,希望你被允许使用一个小的临时布尔数组来计算字符串中不同字符的数量。

1- 使用布尔数组查找字符串中不同字符的数量。设这个数为 x。

2- 检查前 x 个字符是否构成前缀。 (根据 p+x、p+2x 等检查每个指针位置 p)。如果不成功,最短的前缀是整个字符串。

在这两者之间,您可以通过快速检查 x 除字符串的长度来加快速度。..

【讨论】:

    【解决方案2】:

    可以很简单,两个嵌套循环,外层是一个for,从1到length/2,内层是一个while,使用一个指针,每一步增加一个外层迭代变量的值环形。在循环内部,您可以使用 strncmp() 来比较正确的子字符串,如果比较失败则中断循环。如果所有的比较都OK,那么你已经找到了“最短前缀”,那么你就可以打破(for)循环了。 for 循环也可以通过跳过不是输入字符串长度除数的长度来优化。

    这不需要制作一个或多个副本。

    是的,我会让你真正编写代码。

    【讨论】:

      【解决方案3】:

      我不会写有效的代码,而是想法本身。

      首先,你的这个“前缀”的长度是大长度的除数。所以如果前缀的长度 i 不整除字符串的长度 n 则应该跳过它。

      要检查长度 i 是否有效,则需要比较来自位置 j 和 j+i 的字符,以获得 j 的所有可能值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-11
        • 2021-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多