SHOW:
|
|
- or go back to the newest paste.
| 1 | // | |
| 2 | // Created by Julio Tentor <[email protected]> | |
| 3 | // | |
| 4 | ||
| 5 | /* | |
| 6 | Dada una frase determinar si la misma es o no un palíndromo haciendo uso de | |
| 7 | una pila y una cola. No se debe tener en cuenta los espacios en blanco. | |
| 8 | ||
| 9 | */ | |
| 10 | ||
| 11 | import java.util.Scanner; | |
| 12 | import java.util.Stack; | |
| 13 | ||
| 14 | public class CasoEjemplo_c {
| |
| 15 | ||
| 16 | private static Scanner scanner = new Scanner(System.in); | |
| 17 | ||
| 18 | public void Run() {
| |
| 19 | ||
| 20 | System.out.println("Trabajo Práctico Nº 3 - Caso Ejemplo c)\n");
| |
| 21 | ||
| 22 | System.out.print("Ingrese un frase: ");
| |
| 23 | String text = scanner.nextLine(); | |
| 24 | test(text); | |
| 25 | ||
| 26 | // from https://es.wikipedia.org/wiki/Palíndromo | |
| 27 | test("Dábale arroz a la zorra el abad");
| |
| 28 | test("¿Son mulas o cívicos alumnos?");
| |
| 29 | test("Eva, can I stab bats in a cave?");
| |
| 30 | ||
| 31 | } | |
| 32 | ||
| 33 | private void test(String text) {
| |
| 34 | System.out.println("\"" + text + "\"" + (isPalindrome(text) ? "" : " NO ") + " es un palíndromo" );
| |
| 35 | } | |
| 36 | ||
| 37 | private boolean isPalindrome(String text) {
| |
| 38 | ||
| 39 | Stack<Character> stack = new Stack<Character>(); | |
| 40 | Queue<Character> queue = new Queue<Character>(text.length()); | |
| 41 | ||
| 42 | char ch; | |
| 43 | int count = 0; | |
| 44 | for(int pos = 0; pos < text.length(); ++pos) {
| |
| 45 | ch = text.charAt(pos); | |
| 46 | ||
| 47 | if (Character.isAlphabetic(ch)) {
| |
| 48 | ch = Character.toUpperCase( ignoreAccentuation(ch) ); | |
| 49 | stack.push(ch); | |
| 50 | queue.offer(ch); | |
| 51 | ++count; | |
| 52 | } | |
| 53 | } | |
| 54 | ||
| 55 | count /= 2; | |
| 56 | while (count-- > 0) {
| |
| 57 | if ( !stack.pop().equals(queue.remove()) ) {
| |
| 58 | return false; | |
| 59 | } | |
| 60 | } | |
| 61 | ||
| 62 | return true; | |
| 63 | } | |
| 64 | ||
| 65 | private char ignoreAccentuation(char ch) {
| |
| 66 | ||
| 67 | switch(ch) {
| |
| 68 | case 'Á' : | |
| 69 | case 'Ä' : | |
| 70 | case 'À' : | |
| 71 | return 'A'; | |
| 72 | case 'É' : | |
| 73 | case 'Ë' : | |
| 74 | case 'È' : | |
| 75 | return 'E'; | |
| 76 | case 'Í' : | |
| 77 | case 'Ï' : | |
| 78 | case 'Ì' : | |
| 79 | return 'I'; | |
| 80 | case 'Ó' : | |
| 81 | case 'Ö' : | |
| 82 | case 'Ò' : | |
| 83 | return 'O'; | |
| 84 | case 'Ú' : | |
| 85 | case 'Ü' : | |
| 86 | case 'Ù' : | |
| 87 | return 'U'; | |
| 88 | ||
| 89 | case 'á' : | |
| 90 | case 'ä' : | |
| 91 | case 'à' : | |
| 92 | return 'a'; | |
| 93 | case 'é' : | |
| 94 | case 'ë' : | |
| 95 | case 'è' : | |
| 96 | return 'e'; | |
| 97 | case 'í' : | |
| 98 | case 'ï' : | |
| 99 | case 'ì' : | |
| 100 | return 'i'; | |
| 101 | case 'ó' : | |
| 102 | case 'ö' : | |
| 103 | case 'ò' : | |
| 104 | return 'o'; | |
| 105 | case 'ú' : | |
| 106 | case 'ü' : | |
| 107 | case 'ù' : | |
| 108 | return 'u'; | |
| 109 | } | |
| 110 | return ch; | |
| 111 | } | |
| 112 | } | |
| 113 |