Quiero comprobar si una cadena es un palíndromo o no. Me gustaría aprender un método sencillo para comprobar las mismas que usan posibles manipulaciones menos cuerdaforma de Java para comprobar si una cadena es palindrome
Respuesta
Usted puede intentar algo como esto:
String variable = ""; #write a string name
StringBuffer rev = new StringBuffer(variable).reverse();
String strRev = rev.toString();
if(variable.equalsIgnoreCase(strRev)) # Check the condition
También podría reemplazar^[a-z] para que funcione con palíndromos como "Señora, soy Adam". –
@Alex K, si no te preocupas por la distinción entre mayúsculas y minúsculas, entonces tu oración es un palíndromo. ;-) –
Aquí es una buena clase:
public class Palindrome {
public static boolean isPalindrome(String stringToTest) {
String workingCopy = removeJunk(stringToTest);
String reversedCopy = reverse(workingCopy);
return reversedCopy.equalsIgnoreCase(workingCopy);
}
protected static String removeJunk(String string) {
int i, len = string.length();
StringBuffer dest = new StringBuffer(len);
char c;
for (i = (len - 1); i >= 0; i--) {
c = string.charAt(i);
if (Character.isLetterOrDigit(c)) {
dest.append(c);
}
}
return dest.toString();
}
protected static String reverse(String string) {
StringBuffer sb = new StringBuffer(string);
return sb.reverse().toString();
}
public static void main(String[] args) {
String string = "Madam, I'm Adam.";
System.out.println();
System.out.println("Testing whether the following "
+ "string is a palindrome:");
System.out.println(" " + string);
System.out.println();
if (isPalindrome(string)) {
System.out.println("It IS a palindrome!");
} else {
System.out.println("It is NOT a palindrome!");
}
System.out.println();
}
}
disfrutar.
public boolean isPalindrone (String checkPalindrome) { \t \t \t \t int length = checkPalindrome.length(); \t \t int mid = length/2; \t \t int i, j = 0; \t \t \t \t for (i = 0, j = longitud-1; i
El uso de reverse
es exagerado porque no necesita generar una cadena adicional, solo necesita consultar la existente. El siguiente ejemplo verifica que el primero y el último caracteres sean iguales, y luego camina más adentro de la cadena comprobando los resultados cada vez. Vuelve tan pronto como s
no es un palíndromo.
El problema con el enfoque reverse
es que hace todo el trabajo por adelantado. Realiza una acción costosa en una cadena, luego verifica carácter por carácter hasta que las cadenas no son iguales y solo luego devuelve falso si no es un palíndromo. Si solo estás comparando cadenas pequeñas todo el tiempo, entonces está bien, pero si quieres defenderte contra una entrada más grande, entonces deberías considerar este algoritmo.
boolean isPalindrome(String s) {
int n = s.length();
for (int i = 0; i < (n/2); ++i) {
if (s.charAt(i) != s.charAt(n - i - 1)) {
return false;
}
}
return true;
}
Probablemente la solución más rápida por ejecución. –
¡Solución superior! – buruzaemon
¿Se puede modificar esta solución para tomar un carácter como entrada en lugar de una cadena? Estoy buscando la misma solución palindrome pero con la entrada de caracteres. ¿También puedo preguntar si el bucle For está de hecho revisando cada carácter de la mitad de la cuerda y comparándola? Gracias –
para los menos líneas de código y el caso más simple
if(s.equals(new StringBuilder(s).reverse().toString())) // is a palindrome.
comprobar esta condición
cordaje = "// alguna cadena ... //"
cheque esto ... if (string.equals ((string.reverse()) { es palindrome }
' String' no tiene un método 'reverse'. –
supongo que esto es la forma sencilla de comprobar palíndromo
String strToRevrse = "MOM";
strToRevrse.equalsIgnoreCase(new StringBuilder(strToRevrse).reverse().toString());
public static boolean istPalindrom(char[] word){
int i1 = 0;
int i2 = word.length - 1;
while (i2 > i1) {
if (word[i1] != word[i2]) {
return false;
}
++i1;
--i2;
}
return true;
}
Duplicado desde aquí http://stackoverflow.com/a/4138856/1740354. Mencionar la fuente sería una buena idea. –
import java.util.Scanner;
public class FindAllPalindromes {
static String longestPalindrome;
public String oldPalindrome="";
static int longest;
public void allSubstrings(String s){
for(int i=0;i<s.length();i++){
for(int j=1;j<=s.length()-i;j++){
String subString=s.substring(i, i+j);
palindrome(subString);
}
}
}
public void palindrome(String sub){
System.out.println("String to b checked is "+sub);
StringBuilder sb=new StringBuilder();
sb.append(sub); // append string to string builder
sb.reverse();
if(sub.equals(sb.toString())){ // palindrome condition
System.out.println("the given String :"+sub+" is a palindrome");
longestPalindrome(sub);
}
else{
System.out.println("the string "+sub+"iss not a palindrome");
}
}
public void longestPalindrome(String s){
if(s.length()>longest){
longest=s.length();
longestPalindrome=s;
}
else if (s.length()==longest){
oldPalindrome=longestPalindrome;
longestPalindrome=s;
}
}
public static void main(String[] args) {
FindAllPalindromes fp=new FindAllPalindromes();
Scanner sc=new Scanner(System.in);
System.out.println("Enter the String ::");
String s=sc.nextLine();
fp.allSubstrings(s);
sc.close();
if(fp.oldPalindrome.length()>0){
System.out.println(longestPalindrome+"and"+fp.oldPalindrome+":is the longest palindrome");
}
else{
System.out.println(longestPalindrome+":is the longest palindrome`````");
}}
}
Aquí es una simple"
public class Palindrome {
public static void main(String [] args){
Palindrome pn = new Palindrome();
if(pn.isPalindrome("ABBA")){
System.out.println("Palindrome");
} else {
System.out.println("Not Palindrome");
}
}
public boolean isPalindrome(String original){
int i = original.length()-1;
int j=0;
while(i > j) {
if(original.charAt(i) != original.charAt(j)) {
return false;
}
i--;
j++;
}
return true;
}
}
soy nuevo en java y estoy tomando su pregunta como un desafío para mejorar mi conocimiento también, así que por favor, perdóneme si esto no responde bien a su pregunta:
import java.util.ArrayList;
import java.util.List;
public class PalindromeRecursiveBoolean {
public static boolean isPalindrome(String str) {
str = str.toUpperCase();
char[] strChars = str.toCharArray();
List<Character> word = new ArrayList<>();
for (char c : strChars) {
word.add(c);
}
while (true) {
if ((word.size() == 1) || (word.size() == 0)) {
return true;
}
if (word.get(0) == word.get(word.size() - 1)) {
word.remove(0);
word.remove(word.size() - 1);
} else {
return false;
}
}
}
}
- Si la cadena no está hecha de letras o de una sola letra, es palindrome.
- De lo contrario, compare la primera y la última letra de la cadena.
- Si la primera y la última letra son diferentes, la cadena no es un palíndromo
- De lo contrario, la primera y la última letra son las mismas. Elimínalos de la cadena y determina si la cadena que queda es un palíndromo. Tome la respuesta para esta cadena más pequeña y úsela como respuesta para la cadena original y luego repita desde .
La única manipulación de cadenas está cambiando la cadena a mayúsculas para que pueda entrar en algo así como 'XScsX'
public boolean isPalindrom(String text) {
StringBuffer stringBuffer = new StringBuffer(text);
return stringBuffer.reverse().toString().equals(text);
}
- 1. Ruby forma de comprobar cadena palindrome
- 2. La forma más rápida de comprobar una cadena es alfanumérica en Java
- 3. La forma más fácil de comprobar si una Cadena arbitraria es un nombre de archivo válido
- 4. ¿Cómo comprobar si una cadena dada es una parte de cualquier Enum en Java?
- 5. Comprobar si la cadena dada es una dirección URL
- 6. Python: ¿Cómo comprobar si una cadena es un IRI válido?
- 7. ¿Cómo comprobar si un tipo es una cadena en C#?
- 8. Objective-C cómo comprobar si una cadena es nula
- 9. Regex para comprobar si una cadena tiene paréntesis no coincidentes?
- 10. Palindrome Uso de una pila
- 11. ¿Cómo comprobar si una cadena comienza con una cadena especificada?
- 12. Usando StreamReader para comprobar si un archivo contiene una cadena
- 13. Comprobar si es falso
- 14. Función para verificar si una cadena es una fecha
- 15. Biblioteca de Java para comprobar si una cadena contiene un número * sin * excepciones
- 16. jQuery: comprobar si el carácter es en la cadena
- 17. cómo comprobar si java.lang.reflect.Type es una enumeración
- 18. C++ comprobar si una fecha es válida
- 19. compruebe si una cadena es una URL
- 20. Comprobar si un archivo es una imagen
- 21. ¿Cómo comprobar si un objeto es cadena o matriz de cadenas en java?
- 22. ¿Cómo comprobar si una cadena contiene dos caracteres de asterisco?
- 23. ¿Cómo comprobar si una cadena está en una matriz?
- 24. ¿Cómo comprobar si una cadena está vacía en Emacs Lisp?
- 25. ¿Cómo comprobar si mi cadena es igual a nulo?
- 26. Bash - pruebas para comprobar si una cadena es 'mayor' que otro - ¿cómo funciona internamente?
- 27. iPhone: ¿Cómo comprobar si existe una subcadena en una cadena?
- 28. Usando Java Regex, ¿cómo comprobar si una cadena contiene alguna de las palabras de un conjunto?
- 29. Comprobar si un doble es infinita en Java
- 30. Cómo comprobar si una cadena contiene alguna de las cadenas
http://stackoverflow.com/questions/248161/palindrome -detection-efficiency – Andy
@Andy: Eso es para detectar la eficacia de la misma. ¡Quiero el código de la manera más simple con el menor número de líneas de códigos y métodos utilizados! –