题源: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