美文网首页
字典序最小问题

字典序最小问题

作者: nafoahnaw | 来源:发表于2018-06-12 19:35 被阅读0次
/**
 * 给定长度为N的字符串S(只包含大写英文字母),要构造一个长度为N的字符串T。
 * 起初,T是一个空字符串,随后反复进行下列任意操作
 * 1.从S的头部删除一个字符,加到T的尾部
 * 2.从S的尾部删除一个字符,加到T的尾部
 * 目标是要构造字典序尽可能小的字符串T
 * 字典序是指从前到后比较两个字符串大小的方法。首先比较第1个字符,如果不同则第一个字符小的字符串更小,
 * 如果相同则继续比较第2个字符...如此继续来比较整个字符串的大小.
 * @author haofan.whf
 * @version $Id: BestCowLine.java, v 0.1 2018年06月12日 下午6:42 haofan.whf Exp $
 */
public class BestCowLine {

    /**
     * 思路,贪心算法
     * 要组成最小字典序的字符串我们只需要不断的将S.charAt(0)和S.charAt(S.length-1)中
     * 较小的那个添加到结果字符串的尾部即可
     * 唯一的问题是当S.charAt(0)==S.charAt(S.length-1)
     * 我们还需要继续比较S.charAt(1)和S.charAt(S.length-2)...直到分出大小为止
     * 那么由特殊到一般,我们要做的就是比较
     * S.charAt(0 + i)==S.charAt(S.length - 1 - i)的大小
     * if(S.charAt(0 + i) < S.charAt(S.length - 1 - i)){
     *     将S头部的字符放入结果尾部
     * }else{
     *     将S尾部的字符放入结果尾部
     * }
     * @param N
     * @param S
     */
    public void solution(int N, String S){
        StringBuilder tsb = new StringBuilder();
        int start = 0;
        int end = N - 1;
        while (start <= end){
            boolean left = false;
            for (int i = 0; start + i <= end; i++) {
                if(S.charAt(start + i) < S.charAt(end - i)){
                    left = true;
                    break;
                }else if(S.charAt(start + i) > S.charAt(end - i)){
                    left = false;
                    break;
                }
            }
            if(left){
                tsb.append(S.charAt(start ++));
            }else{
                tsb.append(S.charAt(end --));
            }
        }
        System.out.println(tsb);
    }
}

相关文章

  • 字典序最小问题

  • 字典序最小问题

    Best Cow Line 开始搞不懂为什么总是PE,原来80个字母换行~这个条件都没有care到,很有火火家的风格

  • ZOJ 1729 & ZOJ 2006(最小表示法模板题)

    输出每个字符串的最小字典序字串的下标!

  • 拼接最小字典序

    题目 对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。...

  • 贪心法

    1.硬币问题 2.区间问题 解法:在可选的工作中,每次都选取结束时间最早的工作。 3.字典序最小问题 思考: 4....

  • 字符串最低字典序拼接

    题目: 思路: 先解释何为字典序,借用百度百科 首先我们一般都会想到,一个数组,要把所有元素组合起来,字典序最小,...

  • 31.下一排列

    给定一个数列,寻找按字典序排列比它大的下一数列,如果不存在比它大的数列,则寻找字典序最小的数列。 考虑两种情况:1...

  • bigger is greater

    heckerrank 算法题。 原题地址 此题大意为找到,字典序的下一个最小序列。 input output 通过...

  • 有一种问题叫全排列

    全排列问题:(非字典序) public class Main { public static void mai...

  • 【最小字母删除】swift语言实现

    /*【最小字母删除】 对于一个仅含有小写字母的字符串,定义一次删除操作:选择字符串中最小字典序的字母,若有多个相同...

网友评论

      本文标题:字典序最小问题

      本文链接:https://www.haomeiwen.com/subject/dwvreftx.html