gpt4 book ai didi

javascript - 一个字符串可以有一个回文,有没有更好的方法来做到这一点?

转载 作者:数据小太阳 更新时间:2023-10-29 05:07:23 26 4
gpt4 key购买 nike

我今天有一个非常有趣的面试问题:

Given a string, you have to determine whether that string could have a palindrome when permuted.

以下是我想出的实现。但是有更好的解决方案吗?

function canBePalindrome(someStr) {

if (typeof someStr !== "string") {
throw new Error("Expecting argument to be a string !");
}

if (someStr.length == 1) return someStr;
var canBePalin = false;
var _chunks = someStr.split("");
var _length = _chunks.length;
for (var i = 0; i < _length; i++) {
for (var j = i + 1; j < _length; j++) {
var temp_char = _chunks[i];
_chunks[i] = _chunks[j];
_chunks[j] = temp_char;

if (isPalindrome(_chunks.join(""))) return true;

}
}
return canBePalin;

} //End of canBePalindrome


function isPalindrome(someStr) {
//console.log("Checking for:"+someStr);
var original = someStr.split("");
return someStr === original.reverse().join("");
} //End of isPalindrome

canBePalindrome("mdadm");

这不可能是重复的,因为我不是直接检查它是否是回文,而是排列并检查它。

最佳答案

保留一个字符映射表,对它们进行计数,看所有字符的计数是否均匀,如果是,则可以创建回文

function canBePalindrome(someStr) {
var map = {};
var arr = someStr.split('');

arr.forEach(function(s) {
s in map ? map[s]++ : map[s] = 1;
});

var len = Object.keys(map).filter(function(o) {
return map[o] % 2;
}).length;

return arr.length % 2 ? len === 1 : len === 0;
}

FIDDLE

上面的“高尔夫”版本将是

function canBePalindrome(someStr) {
return (function(m, a, l) {
a.forEach(function(s) { s in m ? m[s]++ : m[s] = 1 });
l = Object.keys(m).filter(function(o) { return m[o] % 2 }).length;
return a.length % 2 ? l === 1 : l === 0;
})({}, someStr.split(''));
}

关于javascript - 一个字符串可以有一个回文,有没有更好的方法来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35525793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com