Trouver toutes les sous-chaînes qui sont des palindromes

Si l'entrée est 'abba', puis le possible palindromes sont a, b, b, a, bb, abba.

Je comprends que le fait de déterminer si la chaîne est palindrome est facile. Ce serait comme:

public static boolean isPalindrome(String str) {
 int len = str.length();
 for(int i=0; i<len/2; i++) {
     if(str.charAt(i)!=str.charAt(len-i-1) {
         return false;
     }
 return true;  
}

Mais quel est le moyen efficace de trouver un palindrome sous-chaînes?

  • à l'aide de votre exemple, vous attendez-vous à obtenir de "bab" et "baab" trop?
  • Je me serais attendu à pas, depuis bab et baab n'est pas une partie de la Chaîne, sauf si vous modifiez l'ordre des caractères de la première.
  • ce n'est pas un moyen efficace, mais vous pouvez prendre tous les sous-chaîne, et de vérifier si c'est un palindrome. Il faudrait seulement O(n^3) temps
  • À l'entrée toujours un palindrome?
  • Ainsi, vous pouvez modifier l'ordre des caractères comme vous le souhaitez? cela me semble être un assez grand nombre de palindromes que la chaîne va dans la taille.
  • Je pense que l'ordre des caractères ne peut pas être changé.
  • Êtes-vous sûr? Peut-il être mieux que O(n^3)?
  • Supposons que la. Il n'a pas été mentionné dans la question.
  • probablement
  • "possible palindromes sont a, b, b, a, bb, abba", de Sorte que nous pouvons compter certains d'entre eux à deux reprises en fonction de leur position dans la chaîne d'origine? Cela ressemble à cela pourrait simplifier le problème grandement.
  • Peut-être que vous pourriez itération à travers le potentiel de caractère du milieu (longueur impaire palindromes) et des points intermédiaires entre les personnages (même longueur de palindromes) et de l'étendre de chaque jusqu'à ce que vous ne pouvez pas obtenir de toute autre (côté gauche et droit de caractères ne correspondent pas). Qui permettrait de sauver beaucoup de calcul quand il n'y a pas beaucoup de palidromes dans la chaîne. Dans de tels cas, le coût serait en O(n) pour éparses palidrome cordes. Pour palindrome dense serait O(n^2) comme chaque position ne peut pas être prolongé plus de la longueur du tableau / 2. Évidemment, ce n'est même de moins en moins vers les extrémités de l'éventail.
  • Une simple lettre ne peut pas être un palindrome comme palindrome peut être un mot, une phrase ou un vers.
  • une seule lettre est un palindrome. Donc, est la chaîne vide.
  • Certains personnages peuvent être considérés comme une lettre, un je o par exemple. Mais pas tous d'entre eux et pour assurer une chaîne vide ne peut pas être déclaré comme palindrome comme il n'est pas en vigueur dans l'alphabet.
  • ce n'est Pas Tous les mots d'Une seule lettre peut être palindrome
  • Je parlais des lettres. Définition de palindrome est (ne pas être trop formel) est identique lorsque la lecture à partir, soit du début à la fin ou dans l'autre sens. Cela s'applique certainement à la chaîne vide, trop. Notez que la chaîne vide est un sous-ensemble de toutes les chaînes.
  • La définition de palindrome est celui que le professeur qui a attribué la cession dit qu'il est. 🙂 🙂 🙂
  • lien: désolé, mais quand on programme, on doit penser que les ordinateurs 😉 et 'D est de deux caractères pour l'ordinateur, pas un seul. Quand j'ai dit que seule lettre que je voulais dire d'un caractère entre a et z.
  • Ensuite, le dictionnaire Oxford états est vraiment clair ce qu'est un palindrome est. Il indique que vous pouvez lire. Concernant ensuite commentaire à propos apostrophe D la couture que vous n'avez pas attraper le résumé correctement. Mais ce n'est pas pertinent comme l'ajb souligné. Mais ce que vous devez savoir, c'est que les ordinateurs ne pense pas, ils n'exécutent que des états. À côté de vous n'a jamais écrit one letter word mais single letter.
  • J'ai bien compris le papier que vous y avez accédé. Votre lire le papier ou juste le résumé? parce que vous semblez ne pas comprendre mon commentaire. De toute façon, ce que je voulais souligner c'est qu'il y a une différence entre ce que nous appelons une seule lettre du mot dans le langage naturel et ce qui est considéré comme une seule lettre (= assignable à char) par les ordinateurs. Et la question est sur le programme d'ordinateur, donc je pense que nous pouvons supposer que nous parlons de chars.