diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fun/Palindrome.java	Tue Mar 18 16:23:26 2025 -0400
@@ -0,0 +1,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;
+	}
+	
+}