- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是关于 longest palindrome algorithm 的问题前段时间在这里讨论过。引用blog post解释了该算法,它说:“要选择下一个中心,请取当前回文的最长回文适当后缀的中心”。不幸的是,他们没有提供证明,而且我真的不明白为什么下一个中心是当前回文的最长回文专有后缀的中心。 p>
谁能证明/解释一下?
最佳答案
所以我们向右移动...
假设您的“当前”回文有 40 个字母大。 (也许以位置 100 为中心。)您正试图找到更大的位置。
(好吧,可能有一个更大的,有 900 个字母长,右边有 50,000 个字母 -- 完全不涉及这个。没关系。但我们会在未来解决这个问题。现在,我们必须将中心向右移动,同时寻找超过 40 个回文。有意义吗?)
所以我们必须向右移动 - 我们可以移动一步。但是我们想尽可能地移动而不遗漏任何东西。
现在,如果右边的下一个要包含这个...事实上,它必须包含这个组的最右边的字母 40。(它不能再靠左了,因为我们已经检查过了,所以,它必须在 100 之后居中,而且,因为它会长于 40/strong>,它必须包括我们右边的字母,#120。)
那么我们要追溯到多远?
好吧,你不能返回(从 120)超过回文数!如果中间不是回文就永远不会是回文。
3333333333333331110111
你只能“回到”0。位于 0 左边的 1(例如)永远不可能是回文。
就这么简单。 您必须包括我们最右边的字母(如果我们要包括我们中的任何一个),并且您希望它尽可能大,它必须是回文,因为回文只能从回文开始(我的意思是“从中间开始”)。
在上面的例子中,左边的 1 或 0,或者说最右边的 3,不可能在这个宇宙中以回文为中心,无论我们后来在右边找到什么。它们周围没有回文,因此它们“永远不会”成为回文中心!
请注意,3 中间的 3 可能会以更大的回文为中心......但是不要忘记我们已经检查过这是迄今为止最长的回文(基于中心,从左边开始),所以这不可能是真的。
所以任何比这个更长的回文——更确切地说,比这个更长的回文的下一个可能起点——是 0。
换句话说,它只是我们目前在右边的最大回文的中心。 (所以,不是回文但短的“111”,而是你可以看到的最长回文“1110111”卡在右边。)
确实,我们必须检查的两种可能性是 (A)“0”和 (B)倒数第二个位置的“1”。当然,在这两种可能性中,我们必须从左到右,所以 (A) “0”确实是下一个要检查的。
不要忘记这两个(所讨论的 0 和 1)等同于说“有一个回文 1110111 坚持到最后,还有一个更短的回文 111 坚持到最后”。
当然1110111更长,所以1110111的中心明显在111中心的左边。
最长的回文落在右边,当然中心离左边最近。
因此,希望这能清楚地说明链接博客上讨论的特定部分,您问的是哪个!!!我故意以多种方式重复自己,希望它有所帮助。今天是荣格算法日 :)
再次请注意,我只是明确地尝试澄清 Michael 询问的非常具体的问题。
该死的令人困惑吧?
顺便说一句,我只是忽略了字符外中心的问题 - 但它与理解您所问的内容无关。
关于algorithm - 最长回文算法如何选择下一个中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396418/
我正在尝试编写一个名为 map-longest 的 Clojure 实用函数(感谢备用名称建议)。该函数将具有以下“签名”: (map-longest fun missing-value-seq c1
为什么我创建了一个重复的线程 我在阅读后创建了这个线程 Longest increasing subsequence with K exceptions allowed .我意识到提出问题的人并没有真
我正在编写一个 Sub 来识别 1 到 1000 之间最长的 Collatzs 序列。由于我刚刚开始学习 VBA,我想知道如何添加过程来计算每个序列的长度。 Sub Collatz() Dim i
我正在编写一个 Sub 来识别 1 到 1000 之间最长的 Collatzs 序列。由于我刚刚开始学习 VBA,我想知道如何添加过程来计算每个序列的长度。 Sub Collatz() Dim i
我正在尝试减去 CSV 中的两列以创建第三列“持续时间”结束时间 - 开始时间 每一行也对应一个用户 ID。 我可以创建一个仅包含“持续时间”列的 csv 文件,但我宁愿将其重定向回原始 csv。 例
我在 2018.04 玩这个最长的 token 匹配,但我认为最长的 token 不匹配: say 'aaaaaaaaa' ~~ m/ | a+? | a+ /; # 「a」
因此,按照规范规定最终用户/应用程序提供的给定变量(200 字节)的字节长度。 使用 python 字符串,字符串的最大字符长度是多少,满足 200 字节,因此我可以指定我的数据库字段的 max_le
我需要针对我们的Jenkins构建集群生成每周报告。报告之一是显示具有最长构建时间的作业列表。 我能想到的解决方案是解析每个从属服务器(也是主服务器)上的“构建历史”页面,对于作业的每个构建,都解析该
我正在构建一个 iOS 应用程序,它将流式传输最长为 15 秒的视频。我阅读了有关 HLS 的好文章,因此我一直在对片段大小为 5 秒的视频进行转码。如果视频的第一部分加载时间太长,那么我们可以在接下
docs for Perl 6 longest alternation in regexes punt to Synopsis 5记录 longest token matching 的规则.如果不同的
我是一名优秀的程序员,十分优秀!