收到的挑战:弦乐挑战 让函数 stringchallenge str 接受传递的 str 参数,并确定是否可以通过删除 1 或 2 个字符来创建回文字符串或最小长度为 3 个字符的字符串。例如:如果 str 是“abjchba”,那么您可以删除字符 jc 以生成回文 abba。对于此示例,您的程序应返回两个被删除且不带分隔符的字符,并且按照它们在字符串中出现的顺序排列。所以jc。如果无法删除 1 或 2 个字符来生成回文,则返回不可能的字符串。 如果输入字符串已经是回文,您的程序应该返回回文字符串。您的程序应始终删除字符串中较早出现的字符。在里面 上面的例子,你也可以去掉ch形成回文,但jc先出现,所以正确答案是jc。输入仅包含小写字母字符。您的程序应始终尝试通过删除 1 或 2 个字符来创建最长的回文子字符串,请参阅 以第二个示例测试用例为例。您删除的 2 个字符不必在字符串中相邻。
我的问题是,当删除子字符串来创建回文时,我应该怎么做才能让函数给出预期的输出?有人可以帮我吗???
function StringChallenge(str) {
if(str === str.split("").reverse().join("")) {return str;};
let result = "";
for (let i = 0; i < str.length; i++) {
let items = str[i];
for (let j = i + 1; j < str.length; j++) {
items += str[j];
if (items === items.split("").reverse().join("")) {
if ( result.length < items.length) {result = items;}
}
}
}
return result.length < 3 ? "not possible" : result ;
}
console.log(StringChallenge("kjjjhjjj")); // output expected "k" - output received "jjjhjjj"
console.log(StringChallenge("ana")); // output expected "ana" - ok
console.log(StringChallenge("mmop")); // output expected "not possible" - ok
这是您的答案: 我认为这段代码适用于所有测试用例。
function StringChallenge(str) {
const RESULT_PALINDROME = "palindrome";
const RESULT_NOT_POSSIBLE = "not possible";
function reverseString(string) {
return string.split('').reverse().join('');
}
function isPalindrome(string) {
return string === reverseString(string);
}
function createPalindrome(inputStr, reverseOrder) {
let str = reverseOrder ? reverseString(inputStr) : inputStr;
let result = '';
let temp = str;
for (let i = 0; i < str.length; i++) {
if (str[i] !== str[str.length - 1 - i]) {
if (removeCharAndCheck()) return result;
}
}
return RESULT_NOT_POSSIBLE;
function removeCharAndCheck() {
result += temp[0];
temp = temp.substring(1);
return isPalindrome(temp) && temp.length > 2;
}
}
// If the input string is already a palindrome
if (isPalindrome(str)) return RESULT_PALINDROME;
const fromFirst = createPalindrome(str, false);
const fromLast = createPalindrome(str, true);
if (fromFirst !== RESULT_NOT_POSSIBLE && fromLast !== RESULT_NOT_POSSIBLE) {
if (fromFirst.length > 2 || fromLast.length > 2) return RESULT_NOT_POSSIBLE;
return fromFirst.length > fromLast.length ? fromLast : fromFirst;
}
if (fromFirst !== fromLast && fromFirst === RESULT_NOT_POSSIBLE) {
return fromLast.length > 2 ? RESULT_NOT_POSSIBLE : fromLast;
}
if (fromLast !== fromFirst && fromLast === RESULT_NOT_POSSIBLE) {
return fromFirst.length > 2 ? RESULT_NOT_POSSIBLE : fromFirst;
}
return RESULT_NOT_POSSIBLE;
}
console.log(StringChallenge("kjjjhjjj"));
console.log(StringChallenge("ana"));
console.log(StringChallenge("mmop"));