杀手皇后

题源:https://cometoj.com/contest/58/problem/A?problem_id=2788

时间限制:1000ms 内存限制:256MB

题目描述

这道题用来纪念原本的E题。

突然有人告诉小D,由于某种神秘力量的侵袭,他原本的题目不能用了。别无他法,小D只能从手中的题目里再选一道出来,但由于小D非常难过,这项任务就交给你。具体来说,每道题目有一个由小写字母组成的字符串作为名字,你需要选出一个名字的字符串字典序最小的题目作为新的题目,并输出这个字符串。

关于如何比较两个字符串的字典序,方法是這樣的:从左边第一位开始,如果两个串这一位上的字符不一样,则结束比较,这一位上字符小的串字典序更小,否则继续比较下一位。特殊的,如果比较至某一位时某个串比另一个串长度短提前结束,则长度短的串字典序更小。

输入描述

 

第一行输入一个正整数 nn,

接下来 nn 行,每行读入一个小写英文字母构成的字符串。

  • 2 \leq n \leq 10002≤n≤1000
  • 每個最长的字符串的长度都介於 11 和 10001000 之間(包含 11 和 10001000)

输出描述

 

输出一行,即输入字符串中字典序最小的字符串。

样例输入 1 

5
abbab
abaa
bbab
aba
c

样例输出 1

aba

题解:

解题思路:这道题重点在于对字符串的排序。

解法一:

利用vector容器排序。

#pragma GCC optimize(2)
#include <bits/stdc++.h> 
using namespace std;

typedef long long ll;

int main()
{
//	freopen("input.txt", "r", stdin);
	//提交时注释,调试时取消注释!!! 
	int n;
	cin>>n;
	vector<string> ve;
	string str[1010];
	for(int i=0;i<n;i++)
	{
		cin>>str[i];
		ve.push_back(str[i]);
	}	
	sort(ve.begin(),ve.end());
	cout<<ve[0];	
	return 0;
}

解法二:

利用sort对字符串数组进行排序后输出

#pragma GCC optimize(2)
#include <bits/stdc++.h> 
using namespace std;

typedef long long ll;

int main()
{
//	freopen("input.txt", "r", stdin);
	//提交时注释,调试时取消注释!!! 
	int n;
	cin>>n;
	vector<string> ve;
	string str[1010];
	for(int i=0;i<n;i++)
	{
		cin>>str[i];
		ve.push_back(str[i]);
	}	
	sort(str,str+n);
	cout<<str[0];	
	return 0;
}

解法三:

利用set容器进行字符串排序

set容器自带排序功能,对于这道题来说非常好用。

#pragma GCC optimize(2)
#include <bits/stdc++.h> 
using namespace std;

typedef long long ll;

int main()
{
//	freopen("input.txt", "r", stdin);
	//提交时注释,调试时取消注释!!! 
	int n;
	cin>>n;
	set<string> st;
	string str[1010];
	for(int i=0;i<n;i++)
	{
		cin>>str[i];
		st.insert(str[i]);
	}	
	cout<<*st.begin();	
	return 0;
}

 

知识点小结:

1、字符串的输入,见我博客https://blog.csdn.net/qq_45328552/article/details/99169680

2、vector的相关使用方法,见我博客https://mp.csdn.net/postedit/99119371

3、set的相关使用方法,见我博客https://mp.csdn.net/postedit/99172998

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值