热门标签 | 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


推荐阅读
  • httprunner3.X相比httprunner2.X系统中会新增4个命令:httprunner:核心命令hrun:httprunner的缩写,功能与httprunner完全相同 ... [详细]
  • 内容java基础巩固笔记-实现AOP功能的封装与配置的小框架设计(目录):XXXjava.util.ArrayList中代码Advice接口MyAdvice类BeanFactory ... [详细]
  • #-*-coding:utf-8-*-importurllib2,urllib,cookielibimportreimportgetpassimportsqlite3impor ... [详细]
  • ```#include#include#include#include#defineMAX_Hnodes1#defineMIN_Hnodes2#defineLLlonglongus ... [详细]
  • 深度搜索DFS!
    好的,接下来就是本萌新的第一篇博客啦。直接上深搜!深度优先搜索(Depth-First-Search),简称“深搜”(dfs),是我们蒟蒻们最基本的搜索操作之一。简单地说,深搜就是 ... [详细]
  • .NET Web应用程序安装包的制作经历:Sql数据库安装的3种方式
    一次难得的安装包制作经历,因为之前从没有制作过安装包,那就免不了遇到问题,在摸索和学习中获得了不少宝贵经验,在这里我将用图文并茂的形式详细描述一下流程及主要难点问题的解决方法,希望 ... [详细]
  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持cURL库。本文将介绍cURL的一些高级特性,以 ... [详细]
  • 广州市智昊电气发布的新一代符合配电物联网要求低压回路测控终端(综合监测装置)带通信功能的数字多功能仪表,DAM8000系列低压测控终端的功能是采集三相电压、开关位置、以及配合电流互 ... [详细]
  • 开发笔记:代码发布项目
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了代码发布项目相关的知识,希望对你有一定的参考价值。代码发布概述图 ... [详细]
  • ylbtechLanguageSamplesEvents(事件)
    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Events(事件)1.A,示例(Sample)返回顶部“事件”示例 ... [详细]
  • Vue如何通过公共字段拼接两个对象数组
    这篇文章主要介绍Vue如何通过公共字段拼接两个对象数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.HTML部分  ... [详细]
  • 恢复内容开始作用域分别为:当前对象、方法内部、类;局部变量:在方法体中定义的变量,局部变量只在定义它的方法中有效。成员变量:在整个类中都有效(全局变量是C语言中的叫法,Java中没 ... [详细]
  • 接着《扒一扒Nodejsformidable的onPart》和《也说文件上传之兼容IE789的进度条丢掉flash》;前面已完成兼容IE789的大文件上传:无flash的低版本进度 ... [详细]
  • 答题:消息队列的核心功能就是:解耦合,异步,流量削峰解耦:接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩 ... [详细]
  • HTML5中Viewport的参数介绍以及使用方法
    web前端|H5教程Viewport,参数,使用web前端-H5教程互联网发展越来越快,各种技术层出不穷,其中各种设备的显示尺寸分辨率大小不一,这也是目前我们前端人员比较纠结的问题 ... [详细]
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社区 版权所有