• 字典序最小问题


    给定长度为N的字符串S(只包含大写英文字母),要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作。

    从S的头部删除一个字符,加到T的尾部 ;

    从S的尾部删除一个字符,加到T的尾部。

    目标是要构造字典序尽可能小的字符串T

    输入:

         第一行一个正整数N;

        后面N行,每行一个大写字母。

    输出:

        T(输出时每行写满80个字符就换行)

    样例输入:

    6
    A
    C
    D
    B
    C
    B
    样例输出:
    ABCBCD

    限制条件:

    1≤N≤2000

    字符串S只包含大写英文字母

    解释:字典序是指从前到后比较两个字符串的大小的方法。首先比较第一个字符,如果不同则第一个字符较小的字符串更小,如果相同则继续比较第2个字符......如此继续,来比较整个字符串的大小。

    分析:贪心

    将字符串正序和反序比较,每次将较小串的首字母加到T的末尾!

    var
      n:integer;
      t,s1,s2:ansistring;
      ch:char;
      procedure init;
      var i:integer;
      begin
        readln(n);
        s1:='';s2:='';
        for i:=1 to n do
          begin
            readln(ch);
            s1:=s1+ch;
            s2:=ch+s2;
          end;
      end;
      procedure main;
      var i:integer;
      begin
        for i:=1 to n do
          if s1<s2 then
            begin
              t:=t+s1[1];
              delete(s1,1,1);
              delete(s2,n-i+1,1);
            end
          else
            begin
              t:=t+s2[1];
              delete(s1,n-i+1,1);
              delete(s2,1,1);
            end;
      end;
      procedure print;
      var i:integer;
      begin
        for i:=1 to n do
          begin
            write(t[i]);
            if i mod 80 =0 then writeln;
          end;
      end;
    begin
      init;
      main;
     PRINT;
    end.
  • 相关阅读:
    排序
    多线程
    swift demo
    支付宝支付
    TV端产品设计法则和分析
    产品经理提升修炼的方法
    “互联网+”不是传统企业的万金油
    我眼中理想的程序员
    来谈谈产品的模仿与抄袭的问题
    产品体验成就产品
  • 原文地址:https://www.cnblogs.com/ssfzmfy/p/3916260.html
Copyright © 2020-2023  润新知