Mercurial > repos > rliterman > csp2
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; + } + +}