标签:
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode"
,
dict = ["leet", "code"]
.
Return true because "leetcode"
can be segmented as "leet code"
.
题意: 求给定字符串s是否可以由dist中的多个字符串组合而成。
思路:
设方法inDict(i, j)可以求从i到j的字符串是否在dict中;
1. 对于字符串S="abc",若
inDict(0,0)&&dict(1,2) || dict(0,1)&&dict(2,2) || dict.contains(s) == true; 说明S可以由dict中的字符串构成。
2. 对于任意字符串S,同样可以使用1中的方法来求解;
3. 为了提供效率,申请一个数组map[n][n]用来存放dict(i,j)的结果,其中n=s.length();
代码如下:
public boolean wordBreak(String s, Set<String> dict) { if("".equals(s)) return true; if(dict.size() == 0) return false; int n = s.length(); boolean[][] map = new boolean[n][n]; for(int length=1; length<=s.length(); length++) { for(int start=0; start<=s.length()-length; start++) { boolean result = false; for(int i=start; i<start+length; i++) { result = map[start][i] && map[i+1][start+length-1]; if(result) break; } if(!result) { result = dict.contains(s.substring(start, start+length)); } map[start][start+length-1] = result; } } return map[0][n-1]; }
标签:
原文地址:http://www.cnblogs.com/linxiong/p/4351227.html