哈希集合:求解《409. 最长回文串》

2022-04-19 20:46:11
用哈希集合求解《409. 最长回文串》

Golang 中节省内存的哈希集合 Set 代码


Golang 中的 Set

type void struct{}
var vaule void
set := make(map[string]void) // Create Empty Set
set['key'] = vaule // Add
for key := range set { fmt.Println(key) } // Loop
delete(set, 'key') // Delete
size := len(set) // Size
_, ok := set['key']  // Check

例题

409. 最长回文串

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。

答案

哈希集合 · 集合
var longestPalindrome = function(s) {
  const h = new Set, n = s.length
  let r = 0
  for (let i = 0; i < n; i++) {
    if (h.has(s[i])) {
      h.delete(s[i])
      r += 2
    } else {
      h.add(s[i])
    }
  }
  return r + (h.size ? 1 : 0)
};
func longestPalindrome(s string) int {
  type void struct{}
  var value void
  set := make(map[byte]void)
  n := len(s)
  r := 0
  for i := 0; i < n; i++ {
    _, ok := set[s[i]]
    if ok {
      delete(set, s[i])
      r += 2
    } else {
      set[s[i]] = value
    }
  }
  if len(set) > 0 {
    return r + 1
  } else {
    return r
  }
}

Golang 空哈希集合和 strings.Builder:求解《824. 山羊拉丁文》
用 Golang 的空哈希集合和 strings.Builder 求解《824. 山羊拉丁文》
Brian Kernighan 算法:求解《191. 位1的个数》《338. 比特位计数》《266. 回文排列》和《面试题 01.04. 回文排列》
Brian Kernighan 算法:用数组、哈希表、哈希集合 3 种数据结构求解《191. 位1的个数》《338. 比特位计数》《266. 回文排列》和《面试题 01.04. 回文排列》
位图(位集):求解《2166. 设计位集》
什么是位图(位集),求解《2166. 设计位集》