Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 你能帮我分解这个字符串操作函数吗?(JS)_Javascript_String - Fatal编程技术网

Javascript 你能帮我分解这个字符串操作函数吗?(JS)

Javascript 你能帮我分解这个字符串操作函数吗?(JS),javascript,string,Javascript,String,我想我在正确的地方问了这样的问题,“讨论”标签的描述似乎合适。如果我弄错了,很抱歉:s 我的问题是一个挑战。挑战是: 给定一个字符串,将它(通过洗牌其内容)转换为回文 回文是从左到右和从右到左读取相同内容的字符串 示例: “abcd”->“imp” “cdcd”->“cddc” “AABBaabb33!!??”->“!3?ababababa?3!” 输入为字符串,可以包含字母、数字和/或 如果不可能,则应返回imp(对于不可能),如果有多个解决方案,则按字典顺序返回第一个解决方案 我没能解决

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

我的问题是一个挑战。挑战是:

给定一个字符串,将它(通过洗牌其内容)转换为回文
回文是从左到右和从右到左读取相同内容的字符串

示例:
“abcd”->“imp”
“cdcd”->“cddc”
“AABBaabb33!!??”->“!3?ababababa?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
}
但我不明白。
让我试着解释一下我不明白的地方:

  • 拆分函数的输入究竟是什么
  • 我明白,虽然里面有一个速记if,但它所做的对我来说是不可理解的:s
我知道这类问题在这里没有真正的位置,但我想我设法做到了这一点,这样就有可能得到一个简短、切中要害的答案。
如果有人能帮我把这两个元素分解一下。我会很感激的

  • 拆分实际上是
    split(“”)
    ,它返回单个字符串的数组。分配返回分配的内容,因此代码也在那里初始化a、b和c,但这并不影响拆分

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


  • 参见。

    没有真正的解释,只是一个“扩展”版本:
    s.split(a=b=c=“”)
    没有做任何事情。我认为OP试图声明变量,而不是声明变量:)我不认为这是最好的解决方案,即使它是算法上的。他有未定义的变量。他试图通过使用
    而不是
    if
    来保存行或字符,并且在一个假数组中奇怪地做三个作业,从而不适当地混淆了像你这样勤奋的学生。是的,我同意,但CodeFights选择了最佳解决方案,选择了通过测试的最短的一个。选择最短的一个来看看它是如何完成的,这是我的错。你的答案和JSFIDLE的帮助很大!谢谢。