ho avuto una domanda molto interessante intervista di oggi:Una stringa può avere un palindromo, esiste un modo migliore per farlo?
data una stringa, è necessario stabilire se la stringa potrebbe avere un palindromo quando permutato.
Quanto segue è l'implementazione che mi è venuta in mente. Ma c'è una soluzione migliore?
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");
questo non sarebbe un possibile duplicato perché, non sto controllando se è palindromo direttamente, ma permutando e controllarlo.
Penso che un modo migliore sarebbe quello di contare la frequenza delle lettere. Quindi, ciascuna frequenza di lettere dovrebbe essere pari. Ci può essere una lettera o zero con la frequenza 1. – Haris
Quindi, quello che stai facendo è effettivamente permutare la stringa e controllare palindrome, mi piacerebbe vedere se questo può essere fatto in un modo intelligente. –
A proposito, questo è un modo molto brutale per farlo. Avrebbero sperato che tu già sapessi che esiste un modo più semplice. Ora sai –