热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

KEditDistance

DescriptionDescriptionGivenasetofstringswhichjusthaslowercaselettersandatargetstring,outpu

Description

Given a set of strings which just has lower case letters and a target string, output all the strings for each the edit distance with the target no greater than k.

You have the following 3 operations permitted on a word:

  • Insert a character
  • Delete a character
  • Replace a character

Example

Example 1:

Given words = `["abc", "abd", "abcd", "adc"]` and target = `"ac"`, k = `1`
Return `["abc", "adc"]`
Input:
["abc", "abd", "abcd", "adc"]
"ac"
1
Output:
["abc","adc"]

Explanation:
"abc" remove "b"
"adc" remove "d"

Example 2:

Input:
["acc","abcd","ade","abbcd"]
"abc"
2
Output:
["acc","abcd","ade","abbcd"]

Explanation:
"acc" turns "c" into "b"
"abcd" remove "d"

"ade" turns "d" into "b" turns "e" into "c"
"abbcd" gets rid of "b" and "d"
思路:滚动数组。用字典树对dfs进行优化。
class TrieNode{
    public TrieNode[] sons;
    public boolean isWord;
    public String word;
    
    public TrieNode() {
        int i;
        sOns= new TrieNode[26];
        for (i = 0; i <26; ++i) {
            sons[i] = null;
        }
        
        isWord = false;
    }
    
    static public void Insert(TrieNode p, String word) {
        int i;
        char[] s = word.toCharArray();
        for (i = 0; i  res;
    
    // p is the current TrieNode
    // f[] representss f[Sp][...]
    void dfs(TrieNode p, int[] f) {
        int[] newf;
        int i;
        if (p.isWord && f[n] <= K) {
            res.add(p.word);
        }
        
        for (int c = 0; c <26; ++c) {
            if (p.sons[c] == null) {
                continue;
            }
            
            // calc newf
            newf = new int[n + 1];
            // newf[...]: f[Sp + c][....]
            
            // newf[j] = Math.min(Math.min(f[j], newf[j-1]), f[j-1]) + 1;
            for (i = 0; i <= n; ++i) {
                newf[i] = f[i] + 1;
            }
            
            for (i = 1; i <= n; ++i) {
                newf[i] = Math.min(newf[i], f[i - 1] + 1);
            }   
            
            for (i = 1; i <= n; ++i) {
                if (target[i - 1] - ‘a‘ == c) {
                    newf[i] = Math.min(newf[i], f[i - 1]);
                }
                
                newf[i] = Math.min(newf[i - 1] + 1, newf[i]);
            }
            
            dfs(p.sons[c], newf);
        }
    }
     
    public List kDistance(String[] words, String targets, int k) {
        res = new ArrayList();
        K = k;
        TrieNode root = new TrieNode();
        int i;
        for (i = 0; i 

K Edit Distance


推荐阅读
  • 本文深入探讨了 AdoDataSet RecordSet 的序列化与反序列化技术,详细解析了将 RecordSet 转换为 XML 格式的方法。通过使用 Variant 类型变量和 TStringStream 流对象,实现数据集的高效转换与存储。该方法不仅提高了数据传输的灵活性,还增强了数据处理的兼容性和可扩展性。 ... [详细]
  • 本文探讨了在 SQL 中将中文字符转换为拼音首字母的有效方法和技巧。通过使用特定的函数和算法,可以实现中文名称的快速拼音首字母提取,从而提高数据处理的效率和准确性。文中还提供了具体的示例和代码片段,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 超链接作为网页间的重要连接方式,不仅是信息流动的关键通道,还极大地提升了网络资源的可访问性和互联性。通过超链接,用户能够便捷地在不同网站和页面之间跳转,获取所需信息,促进了互联网内容的广泛传播与高效利用。 ... [详细]
  • 本文深入探讨了Windows操作系统中线程同步机制的关键技术,重点分析了`WaitForSingleObject`和`Event`的使用方法及其应用场景。通过详细介绍`CreateEvent`函数的创建过程及其在判断线程退出和实现线程间同步中的重要作用,结合具体实例,展示了如何高效地利用这些工具来解决多线程编程中的常见问题。此外,文章还讨论了这些机制在实际开发中的最佳实践和注意事项,为开发者提供了宝贵的参考。 ... [详细]
  • 题目要求在给定的数组中找到一个连续子数组,使其乘积最大。本文详细介绍了使用动态规划算法解决这一问题的方法,包括状态定义、状态转移方程和初始化步骤。通过具体的例子和代码实现,帮助读者深入理解该算法的核心思想和实现细节。 ... [详细]
  • 在Tomcat启动过程中,遇到了 `java.io.EOFException` 异常,具体表现为 `ObjectInputStream$PeekInputStream.readFully` 方法读取数据时出现不完整的情况。该问题通常由输入流提前结束或数据传输不完整引起,需要检查数据源的完整性和网络连接的稳定性。 ... [详细]
  • EasyUI作为一种高效的前端框架,显著简化了JavaScript代码的编写,提升了开发效率。在构建窗口应用程序时,首先需要引入EasyUI所需的JS文件和CSS样式表。由于EasyUI依赖于jQuery,因此还需确保正确加载jQuery库。通过这种方式,开发者能够快速实现界面组件的动态交互与美观布局,为用户提供更加流畅的使用体验。 ... [详细]
  • 兰州大学科研团队在项目实践中进行了深入的反思与总结。尽管项目已正式完成,但后续可能仍需持续优化和调整。团队成员对项目的顺利推进表示欣慰,同时也对未来的改进充满期待。目前,项目维护费用尚未到位,但这并未影响团队的积极性和对未来工作的热情。 ... [详细]
  • 触发器是数据库中一种特殊类型的存储过程,其执行依赖于预定义的事件,而非直接调用。在数据库管理中,触发器主要用于实现数据完整性、自动化日志记录及复杂业务规则的执行。当对数据库中的表、视图等对象进行插入、更新或删除操作时,系统将自动激活相关的触发器,以确保数据的一致性和安全性。此外,通过合理设计和优化触发器,还可以显著提升数据库性能和响应速度。 ... [详细]
  • 第一次写这玩意,不知道什么时候能写完,今天项目比较近,期望年底能看完吧。先定个小目标20201228完成第1章Spring介绍第2章入门第3章在Spring中引入IoC和DI第4章 ... [详细]
  • classpath和classpath*区别:classpath:只会到你的class路径中查找找文件。classpath*:不仅包含class路径,还包括jar文件中(class ... [详细]
  • P31 系统全面升级与PUT功能增强
    在P31系统的全面升级中,PUT功能得到了显著增强。具体而言,系统现在支持通过传递一组ID来批量更新或替换公司信息,但这种操作的实际应用场景较为有限,因为其影响范围较大。为了确保数据的安全性和准确性,建议仅在必要时使用此功能,并严格控制更新或新增URI对应资源的权限。 ... [详细]
  • 敏捷开发对于众多经历过复杂编程项目的开发者而言,无疑是一项宝贵的实践。尽管敏捷方法能够加速项目交付,但快速迭代也可能导致较高的Bug率。然而,通过在后期进行严格的测试和持续改进,这些问题可以得到有效解决。此外,敏捷开发还强调团队协作、客户反馈和适应变化,这些因素共同促进了项目的成功。 ... [详细]
  • 如何在SharePoint 2013中使用不同用户身份进行登录操作
    在创建了SharePoint 2013网站后,我注意到其界面与2010版本有所不同,特别是缺少了“以其他用户身份登录”的功能,这对测试工作造成了不便。通过查阅一些国外的技术资源,最终找到了有效的解决方案。这一方法不仅解决了登录问题,还提升了多用户环境下的测试效率和安全性。 ... [详细]
  • 通过Vsphere Client连接至ESXi服务器后,用户需导航至特定界面以配置操作系统安装的各项参数。此过程涉及选择合适的存储设备、网络设置及安装源等关键步骤,确保系统能够顺利部署。 ... [详细]
author-avatar
_嗚啦啦900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有