面试题:将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间

来源:互联网 发布:单片机题库及答案 编辑:程序博客网 时间:2024/05/24 05:04
package my_pro1;import java.util.ArrayList;import java.util.Iterator;public class WorkListOrder {public static int canArrangeWords(String[] arrys){ArrayList<String[]> arry=new ArrayList<>();ArrayList<String> alist=new ArrayList<String>();;for(int ii=0;ii<arrys.length;ii++){arry.add(arrys);//为arry分配内存空间;}if (jmarrys(arrys))             //判断字符串数组中的字符串是否满足要求;{   //第i1次进行字符串提取,找到符合要求的字符串将其保持至alist中,并在数组中删除该字符串;循环执行,直到数组中只剩一个元素;//循环次数为arry.size()-1,表示每次提取字符串,需要数组中存在至少两个元素;for(int i1=0;i1<arry.size()-1;i1++){String[] split=null;ArrayList<String> aaList = new ArrayList<>();String[] lingshi=arry.get(i1);if (tiqu(lingshi) != null){ //判断所提取的字符串是否为空;split=tiqu(lingshi).split("\\+"); //将字符串按+号分割,第一个元素为提取的字符串,第二个元素为该字符串尾字母匹配的字符串索引;alist.add(split[0]);//获取与提取字符串尾字母匹配的字符串,并将其放置字符串数组第一位;int b1=Integer.parseInt(split[1]);String st=lingshi[0];lingshi[0]=lingshi[b1];lingshi[b1]=st;}//在字符串数组中删除所提取的字符串,并将删除后的数组赋给一个新的字符串数组,for (int k = 0; k < arry.get(i1).length; k++)aaList.add(arry.get(i1)[k]);aaList.remove(split[0]);String[] newText = new String[aaList.size()]; arry.set(i1+1,  aaList.toArray(newText));}//当字符串数组中只剩下最后一个元素时,直接将该元素添加到alist中;String[] lingshi2=arry.get(arry.size()-1);alist.add(lingshi2[0]);}if(alist.size()==arrys.length){Iterator<String> iterator=alist.iterator();while(iterator.hasNext()){String testString=(String)iterator.next();System.out.print(testString+" ");}System.out.println();return 1;}return -1;}/** * tiqu(String[] arrys):用于提取字符串数组中,其尾字母在数组中存在匹配首字母项, * 且其首字母在数组中不存在匹配项的字符串; * @param arrys:传入一个字符串数组; * @return:用于返回所提取字符串值及其索引和,与该字符串尾字母匹配的字符串索引; */public static String tiqu(String[] arrys){String str22=null;outer:for(int i=0;i<arrys.length;i++){for(int j=0;j<arrys.length;j++)   {if (arrys[i]==arrys[j] )continue;if(equal(arrys[i],arrys[j])){for(int j1=0;j1<arrys.length;j1++){if (arrys[i]==arrys[j1] )continue;if(equal(arrys[j1],arrys[i])){continue outer;}else if(!equal(arrys[j1],arrys[i])){     str22=String.valueOf(j);return arrys[i]+"+"+j;}}}   }}return null;}/** * equal():用于判断a1的尾字母和a2的首字母是否相等; * @return 相等返回true,否则返回false; */public static boolean equal(String a1,String a2){if((a1!= null)&&(a2!= null)){char[] ch1=a1.toCharArray();char[] ch2=a2.toCharArray();if(ch1[ch1.length-1]==ch2[0])return true;}return false;}public static boolean jmarrys(String[] arrys){int l=arrys.length;for(int i=0;i<l;i++){char[] ch=arrys[i].toCharArray();int l1=ch.length;if(l1>=2 && l1<=100){for (int j=0; j<l1; j++){if(ch[j]>='a' && ch[j]<='z')return true;}}}return false;}public static void main(String[] args){String[] strings={"dfgc","abcd","cdaf","fe","emn"};int s=canArrangeWords(strings); System.out.println(s);}}

IT小白,第一次上传代码,求提宝贵意见!
1 0
原创粉丝点击