zoukankan      html  css  js  c++  java
  • Leetcode----<Re-Space LCCI>

    题解如下:

    /**
         * 动态规划解法:
         * dp[i] 表示 0-i的最小不能被识别的字母个数
         * 求 dp[k] 如果第K个字母 不能和前面的字母[0-{k-1}]合在一起被识别  那么dp[k] = dp[k-1]+1
         * 如果可以别识别 dp[k] = min(dp[k],dp[j-1])
         *
         * 能不能被识别的判断又有几种解法:
         * 1. 使用HashMap  -- 本题解使用HashMap
         * 2. 使用字典树
         * 3. RK算法
         * 参考链接:https://leetcode-cn.com/problems/re-space-lcci/solution/hui-fu-kong-ge-by-leetcode-solution/
         * @param dictionary
         * @param sentence
         * @return
         */
        public int respace3(String[] dictionary, String sentence) {
    
    
            HashMap<String, Integer> map = new HashMap<>();
            for (String s : dictionary) {
                map.put(s,1);
            }
            int length = sentence.length();
            int[] dp = new int[length+1];
            // 由于边界的处理我们让dp[i+1] 表示0-i的最小不能被识别的字母个数
            for (int i = 0; i < length; i++) {
                dp[i+1] = dp[i]+1;
                for (int j = 0; j <= i; j++) {
                    if (map.getOrDefault(sentence.substring(j,i+1),0) == 1) {
                        dp[i+1] = Math.min(dp[i+1],dp[j]);
                    }
                }
            }
            return dp[length];
    
        }
    
  • 相关阅读:
    线程学习笔记(一)
    进程间通信
    管道通信操作
    在程序中执行shell命令
    进程控制(一)
    Makefile文件学习总结
    进程学习笔记
    C#不安全代码和指针
    Unity3D ShaderLab 修改渲染队列进行深度排序
    Unity3D ShaderLab 透明裁剪着色器
  • 原文地址:https://www.cnblogs.com/dream-it-possible/p/13277146.html
Copyright © 2011-2022 走看看