如何解决给你一个等分的字符串并将其反转
let n = "jsdfnsgnlewnl";
let l = n.length;
let trgt = Math.floor((l-1)/2);
function firstHalf(anyhting){
let ans = [];
for (i = trgt; i>=0; i--){
ans.push(n[i])
}
return ans;
}
function lastHlaf (anyhting){
let ansx = [];
for (i=l-1; i>=trgt+1; i--){
ansx.push(n[i])
}
return ansx;
}
let answer = firstHalf(n);
let answerx = lastHlaf(n);
let newAnswer = answer.join("");
let newAnswerx = answerx.join("");
console.log(newAnswer+newAnswerx)
但它正在给予 --> gsnfdsjlnweln
谁能帮我解释一下。
谢谢 例如--> //如果输入像xyzakig一样奇数 //那么中间值不应该改变请帮我理解这个问题
解决方法
Aaaahhh,您对奇数 字符串长度的评论,我想我现在明白您的问题了。因此我编辑了我最初的答案。
-
初始字符串
jsdfnsgnlewnl
分成两部分我们得到左半部
jsdfns
和右半部nlewnl
-
然后反转每个块单独
我们得到
snfdsj
和lnweln
-
检查初始字符串长度是否是奇数
如果是这样,我们定义中间元素,这里
g
-
然后加入 2 个字符串(或 3 个字符串,如果是奇数)
我们得到
snfdsjglnwelng
现在我们得到您请求的结果:snfdsjglnweln
以下代码将为您提供预期的输出:
let n = "jsdfnsgnlewnl";
let l = n.length;
let trgt = Math.floor(l/2); // '(l/2) instead of '((l-1)/2)'
let even = Number.isInteger(l/2); // check if 'l' is an even number
function firstHalf(anyhting){
let ans = []; // index 'i' is zero-based:
for (i = trgt-1; i>=0; i--){ // 'trgt-1' instead of 'trgt'
ans.push(n[i])
}
return ans;
}
function lastHalf (anyhting){ // corrected typo: 'lastHalf' instead of 'lastHlaf'
let ansx = [];
for (i=l-1; i>l-1-trgt; i--){ // 'i>l-1-trgt' instead of 'i>=trgt-1'
ansx.push(n[i])
}
return ansx;
}
let answerMiddle = "";
if (!even) answerMiddle = n[trgt]; // define the "letter in the middle" if odd
let answer = firstHalf(n);
let answerx = lastHalf(n);
let newAnswer = answer.join("");
let newAnswerx = answerx.join("");
console.log(newAnswer + answerMiddle + newAnswerx) // add also '+answerMiddle'
我也对偶数字符串长度进行了测试 - 有效。希望我现在明白了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。