单词切分

给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。
样例
给出
s = "lintcode"
dict = ["lint","code"]

返回 true 因为"lintcode"可以被空格切分成"lint code"


import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

/**
 * 给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。
样例
给出
s = "lintcode"
dict = ["lint","code"]
返回 true 因为"lintcode"可以被空格切分成"lint code"
 * 
 * @author Dell
 *
 */
public class Test107 {
   public static boolean wordBreak(String s, Set<String> dict)
   {
	   
	      if(s.equals(""))
	        return true;
	        else if(dict.size()==0)
	        return false;
	    boolean[] dp=new boolean[s.length()+1];
	    dp[0]=true;
	   int Maxlength=MaxLength(dict);
	    for(int i=1;i<=s.length();i++)
	    {
	    	for(int j=1;j<=Maxlength&&j<=i;j++)
	    	{
	    		 if(dp[i-j]==false)
	    			 continue;
	    		 if(dict.contains(s.substring(i-j,i)))
	    		 {
	    			
	    			 dp[i]=true;
	    			 break;
	    		}
	    		
	    	}
	    	
	    }
	  return dp[s.length()];  
	   
   }
   public static int MaxLength(Set<String> dict)
   {
	   int maxlength=0;
	     Iterator<String> it=dict.iterator();
	     while(it.hasNext())
	     {
	    	String temp=it.next();
	    	 if(maxlength<temp.length())
	    	 {
	    		 maxlength=temp.length();
	    	 }
	     }
	return maxlength;
   }
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String s=sc.nextLine();
		int n=sc.nextInt();
		sc.nextLine();
		HashSet<String> dict=new HashSet<>();
		for(int i=0;i<n;i++)
		{
			dict.add(sc.nextLine());
		}
		
		System.out.println(wordBreak(s,dict));

	}

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值