パズルとなった単語を返す

2985 ワード

ArayRiddle.javaコードは以下の通りです。

  package com.interview.algorithm;

/**
 *   String   ,             .
 *     :  :stale least
 *     :
 * 1.               
 * 2.                   
 * @author yangjianzhou
 *
 */
public class ArrayRiddle {
	
	public static void main(String[] args) {
		String [] strArr = {"123","231","2","1","asdde","12345","sddae","Dasdasdqwe","wdasdqwed"};
		stringArrInsertionSort(strArr);
		int index = getIndex(strArr);
		if(index >-1){
			System.out.println(strArr[index]);
			System.out.println(strArr[index+1]);
		}
	}
	
	/**
	 *            ,           
	 * @param str
	 * @return
	 */
	private static String insertionSort(String str){
		
		char [] target = str.toCharArray();
		
		for(int i=1;i<target.length;i++){
			char temp = target[i];
			int j = i;
			for(;j>0&&temp<target[j-1];j--){
				target[j] = target[j-1];
			}
			target[j] = temp; 
		}
		return String.valueOf(target);
	}
	
	/**
	 *        
	 *      :
	 * 1.       
	 * 2.  ASCII     
	 * @param strArr
	 */
	private static void stringArrInsertionSort(String[] strArr){
		for(int i=1;i<strArr.length;i++){
			String temp = strArr[i];
			int j = i;
			for(;j>0&&(compare(temp,strArr[j-1])==-1);j--){
				strArr[j] = strArr[j-1];
			}
			strArr[j] = temp;
		}
	}
	/**
	 *                
	 * @param strArr
	 * @return
	 */
	private static int getIndex(String[] strArr){
		int index = -1;
		for(int i=0;i<strArr.length-1;i++){
			if(strArr[i].length()!=strArr[i+1].length()){
				continue;
			}else{
				String str1 = insertionSort(strArr[i]);
				String str2 = insertionSort(strArr[i+1]);
				if(str1.equals(str2)){
					index = i;
				}
			}
		}
		
		return index ;
	}
	
	/**
	 *        
	 * 1.    -1
	 * 2.     0
	 * 3.    1
	 * @param str1
	 * @param str2
	 * @return
	 */
	private static int compare(String str1,String str2){
		if(str1.length()<str2.length()){
			return -1;
		}else if(str1.length()>str2.length()){
		   return 1;
		}else{
			String temp1 = insertionSort(str1);
			String temp2 = insertionSort(str2);
			char [] c1 = temp1.toCharArray();
			char [] c2 = temp2.toCharArray();
			for(int i=0;i<c1.length;i++){
				if(c1[i]<c2[i]){
					return -1;
				}
			}
			return 0;
		}
	}
}

 
運転結果は以下の通りです。

asdde
sddae