| Palindrome.java |
1 /**
2 * TIE120 Programming 2, Exam 17.3.2004, Question 2, Example solution.
3 * @author Heikki Kainulainen
4 * @version 1.0, 31.03.2004
5 */
6 public class Palindrome {
7
8 /**
9 * Determines if the specified string is a palindrome.
10 *
11 * <pre>
12 * ALGORITMI:
13 * 1. Olkoon i merkkijonon ensimmäisen ja j merkkijonon viimeisen kirjaimen indeksi.
14 * 2. Jos i ei ole pienempi kuin j: Sana on palindromi. The End.
15 * 3. Olkoon c jonon i:s ja d jonon j:s merkki.
16 * 4. Jos c ei ole kirjain, kasvatetaan i:tä yhdellä ja palataan kohtaan 2.
17 * 5. Jos d ei ole kirjain, pienennetään j:tä yhdellä ja palataan kohtaan 2.
18 * 6. Muutetaan c ja d pieniksi kirjaimiksi.
19 * 7. Jos c ja d eivät ole sama kirjain: Sana ei ole palindromi. The End.
20 * 8. Kasvatetaan i:tä yhdellä, pienennetään j:tä yhdellä ja palataan kohtaan 2.
21 * </pre>
22 *
23 * @param candidate
24 * the string to be tested.
25 * @return <code>true</code> if the string is palindrome; <code>false</code>
26 * otherwise.
27 */
28 public static boolean isPalindrome(String candidate) {
29 for (int i = 0, j = candidate.length() - 1; i < j;) {
30 char c = candidate.charAt(i);
31 char d = candidate.charAt(j);
32 if (!Character.isLetter(c)) {
33 i++;
34 continue;
35 }
36 if (!Character.isLetter(d)) {
37 j--;
38 continue;
39 }
40 if (Character.toLowerCase(c) != Character.toLowerCase(d)) {
41 return false;
42 }
43 i++;
44 j--;
45 }
46 return true;
47 }
48
49 /**
50 * Determines if the specified string is a palindrome. (Alternative
51 * implementation.)
52 *
53 * @param candidate
54 * the string to be tested.
55 * @return <code>true</code> if the string is palindrome; <code>false</code>
56 * otherwise.
57 */
58 public static boolean isPalindrome2(String candidate) {
59 StringBuffer buffer = new StringBuffer();
60 for (int i = 0; i < candidate.length(); i++) {
61 char c = candidate.charAt(i);
62 if (Character.isLetter(c)) {
63 buffer.append(c);
64 }
65 }
66 if (buffer.toString().equalsIgnoreCase(buffer.reverse().toString())) {
67 return true;
68 }
69 return false;
70 }
71
72 public static void main(String[] args) {
73 String[] candidates = {
74 "Taas alle satasella saat!",
75 "Allia vaanii visio: jano-juomisia kai Simo ujona joisi viinaa vailla.",
76 "Emmi! Sana ''myytti'' --- se vesittyy, manasimme!",
77 "saippuakauppias",
78 "Tämä ei liene palindromi."
79 };
80 for (int i = 0; i < candidates.length; i++) {
81 String s = candidates[i];
82 System.out.println(isPalindrome(s) + ": '" + s + "'");
83 System.out.println(isPalindrome2(s) + ": '" + s + "'");
84 }
85 }
86 }
87 | Palindrome.java |