Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时
会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。
因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他
只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
思路:本题实际上是求一个字符串中的最长回文字符串。要求最长回文字符串,则需要找到回文字符串的对称点,对于输入的字符
串的(每个字符)或者(该字符和其相邻字符)进行判断其是否是回文串的对称点,他们分别为回文串长度为奇数和偶数的情况,
即aba或者abba。
/** * 输入 输入一个字符串 * 输出 返回有效密码串的最大长度 * 样例输入 ABBA * 样例输出 4 */ import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner=new Scanner(System.in); String s=scanner.next(); int t1=0; int t2=0; int temp=0; int max=0; for(int i=1;i<s.length()-1;i++){ t1=getLength(s,i,i);//回文串长度为奇数 t2=getLength(s,i,i+1);//回文串长度为偶数 temp=t1>t2?t1:t2; if(max<temp){ max=temp; } } System.out.println(max); } public static int getLength(String s, int i, int j) { int length=0; while(i>=0&&j<s.length()){ if(s.charAt(i)==s.charAt(j)){ if(i==j){ length++; }else{ length=length+2; } i--; j++; }else{ break; } } return length; } }
华为oj--字符串截取(最长回文字符串)
最新推荐文章于 2024-04-21 08:49:41 发布