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;
        }
    
    }
  • 相关阅读:
    java中讲讲PrintStream的用法,举例?
    Spark Scala当中reduceByKey的用法
    springboot与ActiveMQ整合
    solr(六): 集群
    zookeeper集群
    solr(五): centos中, 整合 tomcat&solr
    springboot redis(单机/集群)
    redis 五种数据类型
    redis 集群搭建: redis-cluster
    redis 持久化
  • 原文地址:https://www.cnblogs.com/swqblog/p/13271587.html
Copyright © 2011-2022 走看看