139. Word Break | Java最短代码实现

原题链接: 139. Word Break

【思路】

本题考查动态规划。设一个boolean数组flag,flag[i]表示s的下标从 0 到 i - 1 是否可以被分词,那么判断s在第 i 个下标是否可以被分词——即flag[i + 1]的true or false,那么就要从 j = i 循环到0,一旦找到一个——即flag[j] && s.contains(s.substring(j,i)) = true,那么表示到第 i 个下标也可以被分词,否则,不可以:

    public boolean wordBreak(String s, Set<String> wordDict) {
        boolean[] flag = new boolean[s.length() + 1];
        flag[0] = true;
        for (int i = 1; i <= s.length(); i++) {
            for (int j = i - 1; j >= 0; j--) {
                if (flag[j] && wordDict.contains(s.substring(j, i))) {
                    flag[i] = true;
                    break;
                }
            }
        }
        return flag[s.length()];
    }
34 / 34  test cases passed. Runtime: 5 ms  Your runtime beats 82.43% of javasubmissions.
欢迎优化!

你可能感兴趣的:(java,LeetCode,动态规划)