返回互为字谜的单词

ArrayRiddle.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

你可能感兴趣的:(返回)