Word Break(单词切分)

问题

Given a string s and a dictionary of words dict, determine if s can be break into a space-separated sequence of one or more dictionary words.

Have you met this question in a real interview? Yes
Example
Given s = "lintcode", dict = ["lint", "code"].

Return true because "lintcode" can be break as "lint code".

分析

使用一个数组来记录当前位置是否可以到达。这个位置的是由他前边的可以到达的位置和那个位置到当前位置是否包含在字典里边决定的。
我们用i表示当前位置,用j表示它前边的位置,当res[j]为true并且s的从j到i这部分包含在dict里边时,i位置就也为true。

代码

public class Solution {
    /**
     * @param s:    A string s
     * @param dict: A dictionary of words dict
     */
    public boolean wordBreak(String s, Set dict) {
        // write your code here
        if (s == null || s.length() == 0) {
            return true;
        }
        int wordLength = getMax(dict);
        boolean[] res = new boolean[s.length() + 1];
        res[0] = true;
        for (int i = 0; i < s.length(); i++) {
            for (int j = i; j >= 0 && i + 1 - j <= wordLength; j--) {
                if (res[j] && dict.contains(s.substring(j, i + 1))) {
                    res[i + 1] = true;
                    break;
                }
            }
        }
        return res[res.length - 1];
    }

    private int getMax(Set dict) {
        int max = 0;
        for (String str :
                dict) {
            max = Math.max(str.length(), max);
        }
        return max;
    }
}

你可能感兴趣的:(Word Break(单词切分))