【LeetCode】2309:兼具大小写的最好英文字母
题目描述
见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()
方法获取大写字母的小写版本。