题目地址:
https://www.lintcode.com/problem/largest-letter/description
给定一个字符串 s s s,返回一个字母的大写,要求其大小写都出现在 s s s中。如果存在多个解,则返回最大的那个字母。
直接看每个字母的大小写是否出现过,然后挑出同时出现的且最大的字母。
public class Solution {
/**
* @param s: a string
* @return: a string
*/
public String largestLetter(String s) {
// write your code here
boolean[] existA = new boolean[26], exista = new boolean[26];
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if ('a' <= ch && ch <= 'z') {
exista[ch - 'a'] = true;
} else if ('A' <= ch && ch <= 'Z') {
existA[ch - 'A'] = true;
}
}
char res = 0;
for (int i = 25; i >= 0; i--) {
// 发现字母大小写都出现过,则记录之,退出循环
if (existA[i] && exista[i]) {
res = (char) ('A' + i);
break;
}
}
return res == 0 ? "NO" : String.valueOf(res);
}
}
时间复杂度 O ( l s ) O(l_s) O(ls),空间 O ( 1 ) O(1) O(1)。