题目
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
在比较时,字母是依序循环出现的。举个例子:
如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’
示例 1:
输入: letters = [“c”, “f”, “j”],target = “a”
输出: “c”
示例 2:
输入: letters = [“c”,“f”,“j”], target = “c”
输出: “f”
示例 3:
输入: letters = [“c”,“f”,“j”], target = “d”
输出: “f”
提示:
2 <= letters.length <= 104
letters[i] 是一个小写字母
letters 按非递减顺序排序
letters 最少包含两个不同的字母
target 是一个小写字母
修改后题目:
列表中的字母排列无序
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-smallest-letter-greater-than-target
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
考虑target值的两种情况
1.输出值output在target到‘z’的范围内
2.输出值output值超出‘z’的范围
上代码
#include<iostream>
#include<vector>
#include<string>
using namespace std;
char nextGreatestLetter(vector<char>& letters, char target) {
//思路:考虑output值两种情况
//1.output值在x到‘z’的范围内
char maxc = 'z'+1;
//2.output值超出‘z’的范围
char minc = 'z'+1;
//分别保存两个范围内的值为maxc和minc
for (auto x:letters){
//Case.1
if(x>target && x<maxc){
maxc=x;
}
//Case.2
if(x<minc){
minc = x;
}
}
//Case.2
if(maxc == 'z'+1)return minc;
//Case.1
return maxc;
}
int main(){
char target = 'c';
char input[5]={'d','j','c','b','a'};
vector<char> letters(input,input+5);
cout<<"input array:[";
for(auto x:letters){
cout<<x<<',';
}
cout<<"] target:"<<target<<endl;
char c = nextGreatestLetter(letters,target);
cout<<"later bigger letter is "<<c<<endl;
}
输出:
input array:[d,j,c,b,a,] target:c
later bigger letter is d