你可以为我分解这个字符串操作函数吗? (JS)

时间:2015-07-20 07:57:43

标签: javascript string

我想我在正确的地方提出这样的问题,“讨论”标签的描述似乎很合适。如果我错了,我很抱歉:s

所以,我的问题涉及codefights挑战。挑战是:

  

给定一个字符串,将其(通过将其内容改组)转换为回文结构!   回文是一个从左到右和从右到左读取相同字符串的字符串。

     

例:
      “ABCD” - > “中imp的”
      “CDCD” - > “中CDDC”
      “AABBaabb33 !! ??” - > “中3 ABabbaBA 3!?!”

     
      
  • 输入是一个字符串,可以包含字母,数字和/或? ,!
  •   
  • 如果不可能你应该返回imp(不可能),如果有多个解决方案,则按字典顺序返回第一个
  •   

我没能解决它所以我去看了第二天的最佳解决方案:

function outputString(s) {
  s = s.split(a = b = c = "").sort()
  i = 0
  while (x = s[i])
    x == s[++i] ?
        [a += x, c = x + c, i++] :
        b += x
  return b[1] ? "imp" : a+b+c
}

但我不明白。
让我试着解释一下我不明白的地方:

  • 拆分功能的输入究竟是什么?
  • 我明白,虽然有一个简写,但其中的内容对我来说是不可理解的:s

我知道这些问题在这里确实没有它们的位置,但我认为我设法做到这一点,以便能够得到简短的答案。
如果有人可以为我打破这两个元素。我很感激。

1 个答案:

答案 0 :(得分:2)

  1. 分割实际上是split(""),它返回单个字符串的数组。赋值返回已分配的内容,因此代码也在初始化a,b和c,但它不会影响分割。

  2. while中,程序循环遍历有序字符,并按以下方式创建结果:如果下一个字母相同,则在c之后和之前添加字母,前面提到第二步(注意额外的i ++),否则将字母添加到b。最后,如果有一个以上的单个字母(只有一个可以在中间),则返回" imp"否则a + b + c(这将是使用此算法时的第一个解决方案)。

  3. 请参阅expanded versionAndreas