Leetcode 139. Word Break 笔记

155 阅读1分钟

Medium

思路

  • dp
  • dp[n+1] 代表截止到数组的第n位的sub-string能不能被切割到wordDict中的单词
  • 初始dp[0] = true, 最后返回dp[n]
  • boolean类型的dp, size = n + 1(subString最后一位不包括在内)
  • 定义一个lo指针和一个hi, 做二层for循环
  • 外层是lo, 里层是hi, 每次进入里层之前都需要判断dp[lo] 是不是true, 只有在true的时候才可以继续做内层循环, 表明dp是连续的
  • 里层循环循环worddict里面的单词, 简化代码, 每次hi = lo + 单词长度即可

代码

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        int n = s.length();
        boolean[] dp = new boolean[n + 1];
        dp[0] = true;
        
        for(int lo = 0; lo < n; lo++){
            if(dp[lo]){
                for(String str : wordDict){
                   
                    int hi = lo + str.length();
                    if(hi <= n && s.substring(lo, hi).equals(str))
                        dp[hi] = true;
                    
                }
            }
        }
        
        return dp[n];
    }
}