zoukankan      html  css  js  c++  java
  • LeetCode——(每日一题)恢复空格

    直接dp

    public int respace(String[] dictionary, String sentence) {
            int n = sentence.length();
            if(0==n)return 0;
            int[] dp = new int[n+1];
            for(int i = 1 ; i <= n ; i++)
            {
                dp[i] = dp[i-1] + 1;
                for(String word:dictionary)
                {
                    if(word.length() <= i)
                    {
                        if(sentence.substring(i-word.length(),i).equals(word))
                        {
                            dp[i] = Math.min(dp[i],dp[i-word.length()]);
                        }
                    }
                }
            }
            return dp[n];
         }

    dp+字典树(优化查找过程)

    class Solution {
        public int respace(String[] dictionary, String sentence) {
            Trie root = new Trie();
            for(String word : dictionary)
            {
                root.insert(word);
            }
            int n = sentence.length();
            int[] dp = new int[n+1];
            for(int i = 1; i <= n ; i++)
            {
                dp[i] = dp[i-1] + 1;
                Trie cur = root;
                for(int j = i ; j>= 1 ; j--)
                {
                    int t = sentence.charAt(j - 1) - 'a';
                    if(null == cur.next[t])
                    {
                        break;
                    } 
                    else if(cur.next[t].isEnd)
                    {
                        dp[i] = Math.min(dp[i] , dp[j-1]);
                    }
                    cur = cur.next[t];
                }
            }
            return dp[n];
        }
    }
    class Trie{
        public Trie[] next;
        public boolean isEnd;
        public Trie()
        {
            next = new Trie[26];
            isEnd = false;
        }
    
        public void insert(String word)
        {
            Trie cur = this;
            int n = word.length();
            for( int i = n -1 ; i >= 0 ; i--)
            {
                int t = word.charAt(i)  -  'a';
                if(null == cur.next[t])
                {
                    cur.next[t] = new Trie();
                }
                cur = cur.next[t];
            }
            cur.isEnd = true;
        }
    
    }
  • 相关阅读:
    获取系统环境变量
    改变系统提示信息
    获取任务栏大小
    获取系统启动后经过的时间
    获取系统版本号
    z-tree的使用
    vue学习-day05 -- 案例:名字合并(监听data数据的改变)
    vue学习-day04(路由)
    eclipse在线安装ermaster插件
    vue学习-day03(动画,组件)
  • 原文地址:https://www.cnblogs.com/swqblog/p/13271587.html
Copyright © 2011-2022 走看看