zoukankan      html  css  js  c++  java
  • Java for LeetCode 140 Word Break II

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

    Return all such possible sentences.

    For example, given
    s = "catsanddog",
    dict = ["cat", "cats", "and", "sand", "dog"].

    A solution is ["cats and dog", "cat sand dog"].

    解题思路:

    参考上题思路二的解法,修改下代码,让其显示路径即可,JAVA实现如下:

    static public List<String> wordBreak(String s, Set<String> wordDict) {
    		List<String> list = new ArrayList<String>();
    		dfs(list, s, wordDict, new HashSet<String>(), new ArrayList<String>());
    		return list;
    	}
    
    	static public boolean dfs(List<String> list, String s, Set<String> dict,
    			Set<String> unmatch, List<String> alist) {
    		boolean isMatch=false;
    		for (String prefix : dict) {
    			if (s.equals(prefix)) {
    				alist.add(prefix);
    				StringBuilder sb = new StringBuilder();
    				for (String str : alist) {
    					sb.append(str);
    					sb.append(" ");
    				}
    				list.add(sb.substring(0, sb.length() - 1));
    				alist.remove(alist.size() - 1);
    				isMatch=true;
    				continue;
    			} else if (s.startsWith(prefix)) {
    				String suffix = s.substring(prefix.length());
    				if (!unmatch.contains(suffix)) {
    					alist.add(prefix);
    					if (!dfs(list, suffix, dict, unmatch, alist))
    						unmatch.add(suffix);
    					else isMatch=true;
    					alist.remove(alist.size() - 1);
    				}
    			}
    		}
    		return isMatch;
    	}
    
  • 相关阅读:
    统计学基础
    ip地址分类
    OSI七层协议与TCP/IP模型、三次握手与四次挥手
    计算机编码
    [HNOI2008]Cards
    P4309 [TJOI2013]最长上升子序列
    P3794 签到题IV
    P2605 [ZJOI2010]基站选址
    UVA10791
    P3825 [NOI2017]游戏
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4551337.html
Copyright © 2011-2022 走看看