[算法课][贪心]W12例1字典序最小问题 原创

题目来源 算法课

算法标签 字符串,贪心

题目描述

问题描述:
给定长度为N的字符串S,
要构造一个长度为N字符串T。
T开始是一个空串,反复执行下列任意操作:
1)从S的头部删除一个字符,加到T的尾部;
2)从S的尾部删除一个字符,加到T的尾部;
目标是要构造字典序尽可能小的字符串T。

PS:

字典序是指从前到后比较两个字符串的大小的方法。
首先比较第1个字符,如果不同
则第1个字符较小的字符串更小,
如果相同则继续比较第2个字符…
反复继续,来比较整个字符串的大小。

输入 ACDBCB
输出 ABCBCD

颜老板代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
	int n;
	char *s;
	int zb,yb;

	printf("请你输入一个字符串的长度:");
	scanf("%d",&n);

	getchar();

	s=(char *)malloc(n+1);

	printf("输入一个字符串:");
	gets(s);

	zb=0;
	yb=n-1;

	//*(s+?) 表示s中第?个位置上的字符的值 s[?]
	//谁小谁输出
	while(zb<=yb)
	{
		int left=0; //left=0,表示左边字符小,left=1,表示左边字符大
		int i;
		for(i=0;zb+i<=yb;i++)
		{
			if(*(s+zb+i) < *(s+yb))//左边小,左边的是该输出
			{
				left=0;
				break;
			}
			else if(*(s+zb+i) > *(s+yb))//左边大,右边的是该输出
			{
				left=1;
				break;
			}
		}

		if(left==1)
		{
			putchar(*(s+yb));
			yb--;
		}
		else 
		{
			putchar(*(s+zb));
			zb++;
		}
	}
	return 0;
}

吐槽

纯C代码写字符串真的是让我和小伙伴在台下看得一言难尽
建议用CPP,用String,用reverse
所以我们只理解做题思路,直接A

思路

从PS这一番话里我们知道是字符串前后向中间持续比较字符大小

(1)安全版
为了防止下标问题我们可以直接拆分
例如
A::ACDBCB t1
B::BCBDCA t2

给AB数组分别一个INDEX,在AB数组持续找最小,然后赋值给res数组
输出res答案即可
(2)极简版
需要注意下标处理和生成逻辑

AC代码

安全版
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;
vector<char>ans;

int main()
{
    string a;
    cin>>a;
    string b=a;
    reverse(b.begin(),b.end());
    
    
    int t1,t2,t3;
    t1=t2=t3=0;
    
    while(1)
    {
        if(a[t1]<=b[t2])ans.push_back(a[t1++]),t3++;
        else ans.push_back(b[t2++]),t3++;
    
        if(t3==a.size())break;
    }
    
    for(int i=0;i<ans.size();i++)cout<<char(ans[i]);
    
    return 0;
}
非安全,极简版

需要注意下标处理和生成逻辑

#include<iostream>

using namespace std;

int main()
{
    string a;
    cin>>a;
    
    int l=0,r=a.size()-1;
    
    while(l<=r)
        if(a[l]<a[r])cout<<a[l++];
        else cout<<a[r--];
    
    return 0;
}
posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示