本文共 738 字,大约阅读时间需要 2 分钟。
一个单词从中间切多刀,其实就可以看成只切了两刀,不过前面一段可以继续切,后面一段不可以继续切,就和我之前总结切绳子是一个道理,如果前面一段可以找到(这里其实可以继续分,只要分割后的几段也能在集合中找到也算是找的到),后面这一段也可以找到,拼接在一起后,就一定可以满足要求,可以用一个数组dp[j]表示0到j-1这个字符串存不存在(即使是分割后),只要这个字符串存在dp[j],s.substring(j, i)也存在,就表示这个字符串可以
class Solution { public boolean wordBreak(String s, ListwordDict) { HashSet set = new HashSet<>(wordDict); int len = s.length(); boolean[] dp = new boolean[len + 1]; dp[0] = true; for(int i = 1; i <= len; i++) { for(int j = 0; j < i; j++) { if(dp[j]&&set.contains(s.substring(j, i))) { dp[i] = true; break; } } } return dp[len]; }}
转载地址:http://whhzi.baihongyu.com/