Skip to content

Latest commit

 

History

History
194 lines (155 loc) · 4.62 KB

File metadata and controls

194 lines (155 loc) · 4.62 KB

English Version

题目描述

给你一个由英文字母组成的字符串 s ,请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。

最好 英文字母的大写和小写形式必须 s 中出现。

英文字母 b 比另一个英文字母 a 更好 的前提是:英文字母表中,ba 出现。

 

示例 1:

输入:s = "lEeTcOdE"
输出:"E"
解释:
字母 'E' 是唯一一个大写和小写形式都出现的字母。

示例 2:

输入:s = "arRAzFif"
输出:"R"
解释:
字母 'R' 是大写和小写形式都出现的最好英文字母。
注意 'A' 和 'F' 的大写和小写形式也都出现了,但是 'R' 比 'F' 和 'A' 更好。

示例 3:

输入:s = "AbCdEfGhIjK"
输出:""
解释:
不存在大写和小写形式都出现的字母。

 

提示:

  • 1 <= s.length <= 1000
  • s 由小写和大写英文字母组成

解法

方法一:哈希表 + 枚举

Python3

class Solution:
    def greatestLetter(self, s: str) -> str:
        ss = set(s)
        for c in ascii_uppercase[::-1]:
            if c in ss and c.lower() in ss:
                return c
        return ''

Java

class Solution {
    public String greatestLetter(String s) {
        int[] cnt = new int[26];
        for (char c : s.toCharArray()) {
            if (Character.isLowerCase(c)) {
                cnt[c - 'a'] |= 1;
            } else if (Character.isUpperCase(c)) {
                cnt[c - 'A'] |= 2;
            }
        }
        for (int i = 25; i >= 0; --i) {
            if (cnt[i] == 3) {
                return String.valueOf((char) ('A' + i));
            }
        }
        return "";
    }
}
class Solution {
    public String greatestLetter(String s) {
        Set<Character> ss = new HashSet<>();
        for (char c : s.toCharArray()) {
            ss.add(c);
        }
        for (char a = 'Z'; a >= 'A'; --a) {
            if (ss.contains(a) && ss.contains((char) (a + 32))) {
                return String.valueOf(a);
            }
        }
        return "";
    }
}

C++

class Solution {
public:
    string greatestLetter(string s) {
        unordered_set<char> ss;
        for (char& c : s) ss.insert(c);
        for (char c = 'Z'; c >= 'A'; --c)
            if (ss.count(c) && ss.count(char(c + 32)))
                return string(1, c);
        return "";
    }
};

Go

func greatestLetter(s string) string {
	ss := map[rune]bool{}
	for _, c := range s {
		ss[c] = true
	}
	for c := 'Z'; c >= 'A'; c-- {
		if ss[c] && ss[rune(c+32)] {
			return string(c)
		}
	}
	return ""
}

TypeScript

function greatestLetter(s: string): string {
    let couter = new Array(128).fill(false);
    for (let char of s) {
        couter[char.charCodeAt(0)] = true;
    }
    for (let i = 90; i >= 65; i--) {
        if (couter[i] && couter[i + 32]) return String.fromCharCode(i);
    }
    return '';
}

Rust

impl Solution {
    pub fn greatest_letter(s: String) -> String {
        let mut arr = [0; 26];
        for &c in s.as_bytes().iter() {
            if c >= b'a' {
                arr[(c - b'a') as usize] |= 1;
            } else {
                arr[(c - b'A') as usize] |= 2;
            }
        }
        for i in (0..26).rev() {
            if arr[i] == 3 {
                return char::from(b'A' + i as u8).to_string();
            }
        }
        "".to_string()
    }
}

...