public class WordArrange { public static void swap(int begin,int end,String[]arr){ //交换数组中的两个元素 if(begin==end||arr[begin].equals(arr[end]))return; String temp=arr[begin]; arr[begin]=arr[end]; arr[end]=temp; } public static int getAllOrder(int begin,int end,String[]arr) throws Exception{ //获取全排列 //boolean find=false; if(begin==end){ if(check(arr)==1){ throw new Exception(); /*******!出现后以异常方式跳出递归!*********/ } } else{ for(int i=begin;i<=end;i++){ swap(begin,i,arr); getAllOrder(begin+1,end,arr); swap(i,begin,arr); } } return -1; } public static int check(String[]arr){ //在全排列中检查是否有符合要求的排列 for(int i=0;i<arr.length-1;i++){ if(arr[i].charAt(arr[i].length()-1)!=arr[i+1].charAt(0))return 0; } return 1; } public static int canArrangeWords(int num,String[]arr){ //判断输入条件:输入数组长度是否合适、输入数组中每个字符串长度是否合适、输入字母是否是小写。。。。 if(num<1||num>100||num!=arr.length)return 0; int []len=new int[num]; char []head=new char[num]; char []tail=new char[num]; // String []head_tail=new String[num]; for(int i=0;i<num;i++){ len[i]=arr[i].length(); if(len[i]<2||len[i]>100)return 0; head[i]=arr[i].charAt(0); if(head[i]<'a'||head[i]>'z')return 0; tail[i]=arr[i].charAt(len[i]-1); if(tail[i]<'a'||tail[i]>'z')return 0; //head_tail[i]=Character.toString(head[i])+Character.toString(tail[i]); } //采用全排列思想,并通过异常方式在找到符合条件的排列时跳出递归。 try { return getAllOrder(0,num-1,arr); } catch (Exception e) { // TODO Auto-generated catch block return 1; } } public static void main(String[]args){ int num=5; String[]arr={"aa","cab","bc","cd","de"}; System.out.print(canArrangeWords(num,arr)); } }
点赞 1

相关推荐

勤劳的鲸鱼在okr拆解:没有别的选择就去吧,有实习和没实习找工作是天上地下
点赞 评论 收藏
分享
牛客网
牛客企业服务