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;
        }
    
    }
  • 相关阅读:
    团队冲刺第一天
    leetcode整理
    eclipse 中JSP环境搭建
    java期末小结
    桌面宠物online------------------面对对象程序综合设计2020年
    java
    4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (20分)
    选择
    算法---分支限定0/1背包--蚁群算法
    博客园特效
  • 原文地址:https://www.cnblogs.com/swqblog/p/13271587.html
Copyright © 2011-2022 走看看