题目链接
https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case/
题目大意
给定一个字符串,如果字符串中某一字母的大小写同时出现,则输出该字母的大写;如果多个字母的大小写同时出现,那么,则输出ASCII最大的字母的大写
通过代码
使用两个标记数组,用于标记26个字母的大小写的出现情况
class Solution {
public String greatestLetter(String s) {
boolean[] lower = new boolean[26];
boolean[] upper = new boolean[26];
for (int i = 0; i < s.length(); i++) {
char tmp = s.charAt(i);
if (tmp >= 'a' && tmp <= 'z' && !lower[tmp-'a']) {
lower[tmp - 'a'] = true;
} else if (tmp >= 'A' && tmp <= 'Z' && !upper[tmp-'A'] ) {
upper[tmp - 'A'] = true;
}
}
int index = -1;
for (int i = 0; i < 26; i++) {
if (lower[i] && upper[i]) {
index = i;
}
}
return index != -1 ? (char) ('A' + index) + "" : "";
}
}
官方答案
使用哈希表保存字符串s出现的字符。
class Solution {
public String greatestLetter(String s) {
Set<Character> set = new HashSet<>();
for (int i = 0; i < s.length(); i++) {
set.add(s.charAt(i));
}
for (int i = 25; i >= 0; i--) {
if (set.contains((char) ('A' + i)) && set.contains((char) ('a' + i))) {
return String.valueOf((char) ('A' + i));
}
}
return "";
}
}