字典序最小问题

package demo1;

import java.util.Scanner;


/**
 * 字典序的最小的问题
 * 	给定长度为N的字符串s,要构造一个长度为N的字符串T,开始T是一个空的字符串,随后反复进行下列的操作
 * 
 * 	从S的头部删除一个字符,添加到T的尾部
 * 	从S的尾部删除一个字符,添加到T的尾部
 * 	不论顺序的执行上述的操作。
 * 构造一个尽量小的字符串。
 * 
 * 
 * 
 * @author Administrator
 *
 */
public class Main {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int N = input.nextInt();
		StringBuffer sb = new StringBuffer();
		String str = "";
		String T= "";
		for (int i = 0;i<N;i++){
			str = (sb.append(input.next())).toString();
		}
		//把字符串转化成数组
		char [] cs = str.toCharArray();
		int  a= 0;//表示的是下标
		int b = N-1;//表示的是下标
		
		while (a <= b) {//将从左起和从右起的字符串进行比较
			boolean left = false;
			for (int i=0;a+i<=b;i++) {
				if (cs[a+i]<cs[b-i]) {
					left = true;
					break;
				}else if (cs[a+i] >cs[b-i]){
					left = false;
					break;
				}
			}
			
			if (left) {
				T+=cs[a++];
			}else {
				T+=cs[b--];
			}
			
			
			
		}
		System.out.println(T);
		
		
		
		
		
		
	}
	
}
原文地址:https://www.cnblogs.com/airycode/p/4840804.html