【Golang语言】LeetCode 1002。找到共同的特点

  
  

给定数组小写字母的字符串只返回一个列表的所有字符显示在列表中的所有字符串(包括副本)。举个例子,如果一个角色出现在所有字符串而不是4乘以3倍,需要包括字符三次在最后答案。

  

给定仅有小写字母组成的字符串数组,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现3次,但不是4次,则需要在最终答案中包含该字符3次。
你可以按任意顺序返回答案。
https://leetcode-cn.com/problems/find-common-characters

     
 <代码>输入:(“贝拉”、“标签”、“滚”)
  输出:[“e”、“l”、“l”)  
  
 <代码>输入:(“酷”,“锁”,“煮”)
  输出:[“c”,“o”)  
  

题意:找出所有字符串中都出现过的字符,其实就是求各个字符串的交集,可以按任意顺序返回。
思路一:求每次字符串中的字符出现次数,每次两两字符串比较,26个字符取最小次数的则为两字符串的交集,比如
贝拉b→1 e→1 l→2→1
标签b→1 e→1 l→2→1所以这俩字符串的交集就是一个b e l l
然后继续往下遍历即可。
用价值——a表示26个字母最后再值+ a转回来

  
 <代码>
  func commonChars([]字符串)[]字符串{
  结果:=(int [], 26)
  _,价值:=区间[0]{
  结果[价值- a] + +
  }
  我:=1;我& lt;len(一个);我+ + {
  临时:=([]符文,26)
  _,范围值:=[我]{
  临时价值——a + +
  }
  j:=0;j & lt;26日;j + + {
  结果[j]=int (math.Min (float64(临时[j]), float64(结果[j])))
  }
  }
  
  ret:=([]字符串,0)
  我:=0;我& lt;26日;我+ + {
  如果结果[我]比;0 {
  :=结果[我]
  j:=0
  j & lt;* {
  ret=append (ret,字符串(i + a))
  j + +
  }
  }
  }
  
  返回受潮湿腐烂
  } 
  

思路二:其实也是差不多,也是直接两两比较,求交集,比较到最后的结果就是最后的结果。不过这里的求交集方法不太一样,由于要考虑到重复出现的字符,所以需要采用一个数组来记录某个字符最近一次被找到的位置。如果再次遇到该字符,那么将会从该位置后面开始寻找。

  
 <代码> func commonChars1002([]字符串)[]字符串{
  结果:=([]字符串,0)
  如果len (A)==1 {
  _,符文:=区间[0]{
  结果=append(因此,字符串(符文))
  }
  
  返回结果
  }
  常见:=commonStr ([0], [1])
  我:=2;我& lt;len(一个);我+ + {
  常见=commonStr([我],常见)
  }
  _,符文:=范围常见{
  结果=append(因此,字符串(符文))
  }
  返回结果
  }
  func commonStr字符串(b一个字符串,字符串){
  indexMap:=[26] int {}
  结果:=([]符文,0)
  指数:=0
  _,符文:=范围{
  beforeIndex:=indexMap[符文- a]
  指数=字符串。指数(b [beforeIndex:],字符串(符文))
  如果指数& lt;len (b),,指数在=0 {
  结果=append(因此,符文)
  indexMap[符文- a]=索引+ beforeIndex + 1//截取后索引会从0开始,所以得加上之前的
  }
  }
  返回字符串(结果)
  } 

【Golang语言】LeetCode 1002。找到共同的特点