zoukankan      html  css  js  c++  java
  • Algorithm:字典序最小问题

    Describe
    给一定长为N的字符串S,构造一个字符串T,长度也为N;
    对于空串T,反复进行下列任意操作
    1、从S的头部删除一个字符,加到T的尾部;
    2、从S的尾部删除一个字符,加到T的尾部;

    目标是生成的字符串T的字典序尽可能小;

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

    Input:字符串S
    Output:字符串T

    Example
    Input: ACDBCB
    Output:ABCBCD

    Thinking
    在这里插入图片描述
    即每次只需比较两端,取较小字符,若两端字符相等,则继续向内比较,取较小一端的若干个字符;

    这里的一个技巧就是创建S的反转复制品S‘,这样就只要比较S和S‘左端的若干字符即可,在count达到字符串长度时返回结果即可;
    S: A C D B C B
    S’:B C B D C A

    int main()
    {
    	string s="ACDBCB", ss, t;
    	int len = s.size();
    	for (int i = len - 1; i >= 0; i--)//将s反转拷贝到ss中
    	{
    		ss.push_back(s[i]);
    	}
    
    	while (t.size() < len)
    	{
    		if (s.compare(ss) > 0)//s比ss大
    		{
    			t.push_back(ss[0]);
    			ss.erase(ss.begin()); //删除ss第一个元素
    		}
    		else
    		{
    			t.push_back(s[0]);
    			s.erase(s.begin());
    		}
    	}
    	cout << t << endl;
    	return 0;
    }
    
  • 相关阅读:
    9.10 作业
    Day 03 作业
    Day02作业
    Day09 函数
    day08 简单习题
    Day04 python数据类型和词云的生成
    JAVA: 子类通过static块“覆盖”父类的成员变量风险
    JAVA: 子类“覆盖”父类的成员变量
    Java 访问控制权限
    Java数组类型转为集合类型
  • 原文地址:https://www.cnblogs.com/Luweir/p/14147358.html
Copyright © 2011-2022 走看看