题目描述
见LeetCode.2309题目。
C++
以下是官方题解当中给出做法的复现。
class Solution {
public:string greatestLetter(string s) {unordered_set<char> ht(s.begin(), s.end());for (int i=25; i>=0; i--){if (ht.count('a' + i) > 0 && ht.count('A' + i) > 0){return string(1, 'A' + i);}}return "";};
第一次使用unordered_set这个容器。官方题解当中的思路是使用一个哈希表,如果字符在原字符串当中出现过,则设置为true,最后对hashmap进行遍历,如果最大的小写字母和大写字母同时出现,那么它就是答案,否则输出空串。
Golang
以下是使用Golang语言进行的官方题解代码复现。
func greatestLetter(s string) string {set := map[rune]bool{}for _, c := range s {set[c] = true}for i := 'Z' ; i >= 'A'; i -- {if set[i] && set[unicode.ToLower(i)]{return string(i)}}return ""
}
查阅了一些相关资料,对Go当中=和:=的区别(https://zhuanlan.zhihu.com/p/623547784)加以总结:
- :=用于短变量的声明和初始化,该运算符可以定义一个新的变量并进行赋值,例如- x := 10。这个语法糖会根据- :=右边的表达式类型自动推导出左侧变量的类型。需要注意的是,- :=只能在函数内部使用,在函数的外部只能使用- var关键字;
- =符号用于变量的赋值操作,它将右边的值赋给左边的变量,例如- x = 20。需要注意的是- =只能用于变量的赋值,而不会自动地进行变量类型的推导。
因此,上述Go代码当中的第一行set := map[rune]bool{}相当于声明了一个名为set的map类型变量,并赋值(所赋的值就是map类型实例)。
而在第二个for循环中,Go语言使用unicode.ToLower()方法获取大写字母的小写版本。