- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要一个非蛮力算法来确定您需要从一个单词中删除的最少字母数量,才能使其成为回文的变位词。
例如:abba
-> 0, abbac
-> 0, aabbfghj
-> 3, a
-> 0,abcdefghij
-> 9。
蛮力算法看起来像这样:
1. Send word to method (2.) with counter 0
2. Check if any anagrams of word is palindrome, if yes return counter, if no go to 3.
3. Remove head of word, send to method (2.) with counter++
我认为蛮力法的复杂度为 O(n*n!)(因为对于每个单词,有 n! 个字谜和 n 个字母要删除)。例如,对于字符串 n=1000,这将花费太长时间。所以我需要一个更好的算法,但不确定我可以检查字符串的哪些内容以确定需要删除的字母数量。
因为 n>1 的所有回文在某处都有一对/字母倍数(aba
有对 aa
,abcba
对 aa
和 bb
, aaab
有 aaa
) 我考虑过删除一个字母的所有倍数然后返回新单词的长度- 1,如果它是 0,则只是长度。这对很多单词都有效,但对某些单词仍然失败。例如:
"aabbfghj" (remove pairs) -> "fghj" (length >0) -> return length-1 = 3 correct
"aabbcc" -> "" (!length >0) -> return length = 0 correct
"aaabb" -> "" -> 0 correct
"aaabbb" -> "" -> 0 correct
"aaabbbccdef" -> "def" -> 2 correct
"aaaaab" -> "b" -> 0 correct
"aabbc" -> "c" -> 0 correct
"aaabbc" -> "c" -> 0 incorrect (should be 1)
我是不是漏掉了一些 super 简单的东西?我如何构建一种算法,该算法将返回您需要从单词中删除的最少字母数量才能获得回文字谜?
最佳答案
Am I missing something super simple here?
是的,你是:-)
作为回文的变位词可以表征如下:
一个单词 w
是回文的变位词当且仅当,最多存在一个字符 c
使得 c
的出现次数在 w
中是奇怪的(我让你明白为什么这是真的,在简单的情况下测试)。
因此,给定一个单词 w
,计算 w
的每个字符出现的次数。然后计算有多少个字符在 w
中出现奇数次(我们称之为 k
)。如果 k=0
或 k=1,则要删除的字母数
。否则为w
可以是回文的变位词是 0
k-1
。
关于给定一个单词的算法返回从中删除成为回文字谜所需的最少字母数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55576460/
我有一个依赖于包 B 的包 A。当包 A 中的代码运行并访问包 B 中的类时,包 B 的状态将被解析 (4),而不是 Activity (32) 和包 B 的激活器也没跑好。我认为 bundle B
这个问题在这里已经有了答案: How to remove the space between inline/inline-block elements? (41 个回答) 关闭 7 年前。
我正在尝试使用 Java OpenAL 库。我在导入名为 libsoft_oal.so 的 native 库时遇到问题。 Java OpenAL 依赖于 OpenAL 软实现。我尝试根据他们在 git
我正在尝试启动我的应用程序。是一个 unicorn +工头+sinatra的应用。 这是我的 config.ru 文件: require "rubygems" require "sinatra" Bu
我有一个下拉列表,其中包含一些从数据库表中检索的值,我想要的是当单击按钮时它应该只获得选项标签的中间值,但只有那些类名为“get_this”的选项标签并离开那些选项,如果他们没有这个类 预期输出:值
我有一个index.php文件,需要一个通用的head.php文件,head.php文件中有几个Javascript文件,当这样尝试时,代码在源代码中看起来很好,但文件却不是实际上对文档做任何事情。
有人能帮帮我吗? 我已经像这样运行了 imsmod: $ insmod /data/mm/mmdev.ko epoll_rate=100 但是我得到一个错误: insmod: init_module
是否有键盘快捷键或插件可以在 Notepad++ 中打开 PHP 所需或包含的文件?我知道,在 Dreamweaver 中,执行此操作的命令是 Ctrl+D,但我似乎无法在 Notepad++ 中找到
我已经用 js 设置了一个显示/隐藏 div,但我很难弄清楚如何一次显示一个 div。目前发生的情况是,除非我再次单击原始链接来关闭该 div,否则每个 div 都会显示。 http://www.li
当我尝试将未分配的辅助分片分配给节点时出现错误。 { "error": { "root_cause": [ { "type": "remote_transpor
我正在构建一个 C++ 应用程序,使用 Netbeans 6.9 作为我的 IDE。我有一个 C++ 库,它是一个纯 C 库的包装器。 我已将文件正确添加到项目中(使用添加库文件选项)。这是 g++
我是一名优秀的程序员,十分优秀!