面試題:將一個字串陣列中的字母按照以下規則排列:表中任何單詞的首字母與其前面單詞的尾字母相同! 要求:字串只由小寫字母構成,且每個字串長度在2-100之間
阿新 • • 發佈:2019-01-23
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小白,第一次上傳程式碼,求提寶貴意見!