• 139. Word Break


    package LeetCode_139
    
    /**
     * 139. Word Break
     * https://leetcode.com/problems/word-break/description/
     *
     * Example 1:
    Input: s = "leetcode", wordDict = ["leet", "code"]
    Output: true
    Explanation: Return true because "leetcode" can be segmented as "leet code".
     * */
    class Solution {
        fun wordBreak(s: String, wordDict: List<String>): Boolean {
            val map = HashMap<String, Boolean>()
            val set = HashSet<String>()
            for (word in wordDict) {
                set.add(word)
            }
            return dfs(s, set, map)
        }
    
        /**
         * soulution: backtracking+memorized, Time complexity:O(2^n), Space complexity:O(n)
         * */
        private fun dfs(s: String, set: HashSet<String>, map: HashMap<String, Boolean>): Boolean {
            if (map.contains(s)) {
                return map.get(s)!!
            }
            if (set.contains(s)) {
                map.put(s, true)
                return true
            }
            //check left side and right side by each levels
            for (i in 1 until s.length) {
                val left = s.substring(0, i)
                val right = s.substring(i)
                if (set.contains(right) && dfs(left, set, map)) {
                    map.put(s, true)
                    return true
                }
            }
            map.put(s, false)
            return false
        }
    }
  • 相关阅读:
    SDOI2015 寻宝游戏
    SDOI2015 排序
    CF 500G
    CF 506E
    CEOI2014 wall Spoiler
    java 反射
    安卓资源网站收集
    JNI学习2:android 调用C语言方法与C语言调用android方法
    自定义视图收藏
    Android开源项目第一篇——个性化控件(View)篇
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13092099.html
Copyright © 2020-2023  润新知