public class oulahuanwenti {
static boolean boo = false;
public static void main(String[] args)
{
String[] str = {"qwe","ert","tyu","uij","jkl"}; //true
String[] str1 = {"tyu","uij","ert","jkl","qwe"};//true
String[] str2 = {"tyg","uij","ert","jkl","qwe"};//false...无法首尾匹配
String[] str3 = {"t","tij","ert","jkl","lwe"}; //false...字符串长度小于2
String[] str4 = {"tEr","rIj","jRt","tkl","lwe"};//false...有大写字母
System.out.println(canArrangewords(str));
boo = false;
System.out.println(canArrangewords(str1));
boo = false;
System.out.println(canArrangewords(str2));
boo = false;
System.out.println(canArrangewords(str3));
boo = false;
System.out.println(canArrangewords(str4));
}
//检测字符串长度和字符的要求
public static boolean teststring(String t)
{
char[] c = t.toCharArray();
if(c.length<2 || c.length>100)
{
return false;
}
for(int i=0;i<c.length;i++)
{
if(c[i]<'a' || c[i]>'z')
{
return false;
}
}
return true;
}
//检测字符串数组是否符合要求
public static boolean teststr(String[] str)
{
for(int i=0;i<str.length;i++)
{
if(!teststring(str[i]))
{
return false;
}
}
return true;
}
//比较两个字符串是否符合要求
public static boolean equals(String head,String tail){
char[] h = head.toCharArray();
char[] t = tail.toCharArray();
if(h[0]==t[t.length-1])
{
return true;
}
return false;
}
//输出结果
public static boolean canArrangewords(String[] arr)
{
if(!teststr(arr))
{
return false;
}
Arrangewords(arr,arr.length,0,new String[0]);
return boo;
}
//递归实现所有可能的排列
public static void Arrangewords(String[] arr,int max,int now,String[] n)
{
if(max==now){
if(cando(n)){
boo = true;
}
return;
}
String[] tmp,n1;
for(int i=0;i<arr.length;i++)
{
tmp = new String[arr.length-1];
for(int j=0;j<i;j++)
{
tmp[j] = arr[j];
}
for(int j=i+1;j<arr.length;j++)
{
tmp[j-1] = arr[j];
}
n1 = new String[now+1];
for(int j=0;j<now;j++)
{
n1[j] = n[j];
}
n1[now] = arr[i];
Arrangewords(tmp,max,now+1,n1);
}
}
//比较字符串数组中每前后两个字符是否符合要求
public static boolean cando(String[] arr)
{
for(int i=1;i<arr.length;i++)
{
if(!equals(arr[i],arr[i-1]))
{
return false;
}
}
return true;
}
}