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;
        }
    
    }
  • 相关阅读:
    [日本语]自动词和他动词区别的重要性
    [日本语]授受关系动词总结
    [日本语]至少すくなく(と)も
    python3: 文件与IO
    python3: 迭代器与生成器(1)
    python3: 数字日期和时间(2)
    python3: 数字日期和时间(1)
    python3: 字符串和文本(4)
    Python Frame
    python3: 字符串和文本(3)
  • 原文地址:https://www.cnblogs.com/swqblog/p/13271587.html
Copyright © 2011-2022 走看看