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