1. 程式人生 > >面試題:將一個字串陣列中的字母按照以下規則排列:表中任何單詞的首字母與其前面單詞的尾字母相同! 要求:字串只由小寫字母構成,且每個字串長度在2-100之間

面試題:將一個字串陣列中的字母按照以下規則排列:表中任何單詞的首字母與其前面單詞的尾字母相同! 要求:字串只由小寫字母構成,且每個字串長度在2-100之間

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小白,第一次上傳程式碼,求提寶貴意見!