view CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fun/Palindrome.java @ 68:5028fdace37b

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 16:23:26 -0400
parents
children
line wrap: on
line source
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;
	}
	
}