• 8.7贪心策略例题:字典序最小问题


    字典序最小问题:
    给一个定长为N的字符串S,构造一个字符串T,长度也为N。
    起初,T是一个空串,随后反复进行下列任意操作
    1. 从S的头部删除一个字符,加到T的尾部
    2. 从S的尾部删除一个字符,加到T的尾部
    目标是最后生成的字符串T的字典序尽可能小

    1≤N≤2000
    字符串S只包含大写英文字母

    输入:字符串S
    输出:字符串T
    POJ - 3617 要求每80个字符换行输出

    思路:
    用StringBuilder接收字符串s,在用String s1接收一个翻转字符串后的s。
    s和s1的首字符不断比较大小,谁大就把当前首字符添加到T中,并且当前的字符串等于第二个字符开始到结尾的所有字符,直到T的长度大于s的长度就退出循环。
    注意每行80个字符,循环里要计数。

     1 import java.util.Scanner;
     2 
     3 public class Eight_7贪心策略例题_字典序最小问题 {
     4     public static void main(String[] args) {
     5         Scanner in = new Scanner(System.in);
     6         int N = in.nextInt();
     7         StringBuilder s = new StringBuilder();
     8         for(int i = 0; i < N; i++){
     9             s.append(in.next());
    10         }
    11         f(s.toString());
    12     }
    13 
    14     private static void f(String s) {
    15         String s1 = new StringBuilder(s).reverse().toString();
    16         int N = s.length();
    17         StringBuilder t = new StringBuilder();
    18         int cnt = 0;
    19         while(t.length() < N){
    20             if(s.compareTo(s1) <= 0){
    21                 t.append(s.charAt(0));
    22                 s = s.substring(1);
    23             }else{
    24                 t.append(s1.charAt(0));
    25                 s1 = s1.substring(1);
    26             }
    27             //字符满80个就换行
    28             if(t.length()%80 == 0){
    29                 System.out.println(t.substring((cnt*80),(cnt+1)*80));
    30                 cnt++;
    31             }
    32         }
    33         //打印剩余不足以80的字符
    34         if(t.length() > cnt*80){
    35             System.out.println(s.substring(cnt*80));
    36         }
    37     }
    38 }
  • 相关阅读:
    PHP面向对象之原型(trait)
    PHP面向对象之命名空间
    Javascript中的Copy()函数
    六、unique_lock取代lock_guard
    五、互斥量
    四、创建和等待多个线程
    三、线程传参
    二、线程的启动与结束 join与detach
    HTTP:常见状态码
    HTTP:简述URL、URN和URI
  • 原文地址:https://www.cnblogs.com/GrnLeaf/p/12769701.html
Copyright © 2020-2023  润新知