给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。
样例
给出
s = "lintcode"
dict = ["lint","code"]
样例
给出
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));
}
}