给你一个相等的字符串并将其反转
You are given a string equal halves and reverse it
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)
在此代码中,输出应为 -> snfdsjglnweln
但它正在给予 --> gsnfdsjlnweln
谁能解释一下。
谢谢
例如 -->
//如果输入像 xyzakig 一样奇数
//那么中间值不应该改变请帮助我理解这个问题
Aaaahhh,关于 odd 字符串长度的评论,我想我现在明白你的问题了。因此我编辑了我的初始答案。
初始字符串 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'
我也测试了字符串长度 - 有效。希望我现在明白了。
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)
在此代码中,输出应为 -> snfdsjglnweln
但它正在给予 --> gsnfdsjlnweln
谁能解释一下。
谢谢 例如 --> //如果输入像 xyzakig 一样奇数 //那么中间值不应该改变请帮助我理解这个问题
Aaaahhh,关于 odd 字符串长度的评论,我想我现在明白你的问题了。因此我编辑了我的初始答案。
初始字符串
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'
我也测试了字符串长度 - 有效。希望我现在明白了。