File: Palindrome.java

package info (click to toggle)
bbmap 38.90%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 21,520 kB
  • sloc: java: 265,882; sh: 14,954; python: 5,247; ansic: 2,074; perl: 96; xml: 38; makefile: 37
file content (77 lines) | stat: -rwxr-xr-x 1,568 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package fun;

import shared.Tools;

public class Palindrome {
	
	public static void main(String[] args){
		System.out.println(longestPalindrome(args[0]));
	}
	
	public static String longestPalindrome(String s){
		int longestLength=0;
		int longestStart=0;
		for(int i=0; i<s.length(); i++){
			int lenEven=palindromeLength(s, i, i+1);
			if(lenEven>longestLength){
				longestLength=lenEven;
				longestStart=i-lenEven/2+1;
			}
			int lenOdd=palindromeLength(s, i, i);
			if(lenOdd>longestLength){
				longestLength=lenOdd;
				longestStart=i-lenOdd/2;
			}
		}
		return s.substring(longestStart, longestStart+longestLength+1);
	}
	
	public static int palindromeLengthOdd(String s, int middle){
		int length=1;
		int a=middle-1, b=middle+1;
		while(a>=0 && b<s.length()){
			if(s.charAt(a)==s.charAt(b)){
				a--;
				b++;
				length+=2;
			}else{
				break;
			}
		}
		return length;
	}
	
	public static int palindromeLengthEven(String s, int middle){
		int length=0;
		int a=middle, b=middle+1;
		while(a>=0 && b<s.length()){
			if(s.charAt(a)==s.charAt(b)){
				a--;
				b++;
				length+=2;
			}else{
				break;
			}
		}
		return length;
	}
	
	public static int palindromeLength(String s, int a, int b){
		while(a>=0 && b<s.length()){
			if(s.charAt(a)!=s.charAt(b)){break;}
			a--;
			b++;
		}
		return Tools.max(0, b-a-2);
	}
	
	public static boolean isPalindrome(String s, int a, int b){
		while(a<b){
			if(s.charAt(a)!=s.charAt(b)){
				return false;
			}
		}
		return true;
	}
	
}