字典序最小问题

字典序最小问题

/*
字典序最小问题
给一个定长为N的字符串S,构造一个字符串T,长度也为N。
起初,T是一个空串,随后反复进行下列任意操作

  1. 从S的头部删除一个字符,加到T的尾部
  2. 从S的尾部删除一个字符,加到T的尾部
    目标是最后生成的字符串T的字典序尽可能小
    1≤N≤2000
    字符串S只包含大写英文字母
    输入:字符串S 6 A C D B C B
    输出:字符串T ABCBCD
    POJ - 3617 要求每80个字符换行输出
    */
package _90贪心;
import java.util.Scanner;

public class 字典序最小 {
public static void main(String[] args) {
	Scanner in=new Scanner(System.in);
	StringBuilder sc=new StringBuilder();
	int n=in.nextInt();//输入字典数长度
	for(int i=0;i<n;i++) {
		sc.append(in.next());//添加入
	}
	String s=sc.toString();//转化为字符串  
//	String s1=in.nextLine();
	  f(s);
}
private static void f(String s1) {
	// TODO Auto-generated method stub//要建立StringBuilder才能翻转
	String s2=new StringBuilder(s1).reverse().toString();//先翻转然后转化为字符串
	int n=s1.length();
    StringBuilder xin=new StringBuilder();//建立新字符对象,存储结果
    while(xin.length()<n) {//不能超出长度
    	if(s1.compareTo(s2)<=0) {//s与ss比较 小于0的就运行
    		xin.append(s1.charAt(0));//添入
    		s1=s1.substring(1);//删头
    		
    	}else {
    		xin.append(s2.charAt(0));//添入
    		s2=s2.substring(1);//删头
    	}
    }
     System.out.println(xin.toString());//输出
}
}
/*
//字符满80个就换行
if (rs.length() % 80 == 0) {
  System.out.println(rs.substring(cnt * 80, (cnt + 1) * 80));
  cnt++;
}
}
//余数部分
if (rs.length() > cnt * 80) {
System.out.println(rs.substring(cnt * 80));*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金石不渝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值