首页 > 其他 > 详细

leetCode解题报告之Word Break

时间:2014-03-21 02:27:53      阅读:506      评论:0      收藏:0      [点我收藏+]

题目:

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,它的长度为N,如果S能够被“字典集合”(dict)中的单词拼接而成,那么所要满足的条件为:

F(0, N) = F(0, i) && F(i, j) && F(j, N);

这样子,如果我们想知道某个子串是否可由Dict中的几个单词拼接而成就可以用这样的方式得到结果(满足条件为True, 不满足条件为False)存入到一个boolean数组的对应位置上,这样子,最后boolean数组的最后一位就是F(0, N)的值,为True表示这个字符串S可由Dict中的单词拼接,否则不行!

话不多说,上AC代码!!


package cn.xym.leetcode;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Solution {
        /**
	 * 方法二:
	 */
	public boolean wordBreak2(String s, Set<String> dict){
		int len = s.length();
		boolean[] arrays = new boolean[len+1];
		arrays[0] = true;
		for (int i = 1; i <= len; ++i){
			for (int j = 0; j < i; ++j){
				if (arrays[j] && dict.contains(s.substring(j, i))){
					// f(n) = f(0,i) + f(i,j) + f(j,n)
					arrays[i] = true;
					break;
				}
			}
		}
		return arrays[len];
	}
	/*
	 * 方法一:
	 * */
	public boolean wordBreak1(String s, Set<String> dict) {
		boolean flag = false;
		int strLen = s.length();
        List<Integer> list = new ArrayList<Integer>();
        for (int i=strLen-1; i>=0; --i){
        	String endSubStr = s.substring(i);
        	if (dict.contains(endSubStr)){
        		list.add(i);
        	}else{
        		for(Integer n : list){
        			if (dict.contains(s.substring(i,n))){
        				list.add(i);
        				break;
        			}
        		}
        	}
        }
        if (list.isEmpty()){
        	flag = false;
        }else{
        	Integer n = list.get(list.size() - 1);
        	flag = n == 0 ? true : false;
        }
        return flag;
	}
	
	
	public static void main(String[] args) {
		String s = "leetcode";
		Set<String> dict = new HashSet<String>();
		dict.add("leet");
		dict.add("code");
		Solution solution = new Solution();
		System.out.println(solution.wordBreak2(s, dict));
	}
}

leetCode解题报告之Word Break,布布扣,bubuko.com

leetCode解题报告之Word Break

原文:http://blog.csdn.net/ljphhj/article/details/21643391

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!