密码脱落

来源:互联网 发布:mysql php apache集成 编辑:程序博客网 时间:2024/04/25 21:21
/** *10. 密码脱落 *X星球的考古学家发现了一批古代留下来的密码。 *这些密码是由A、B、C、D 四种植物的种子串成的序列。 *仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。 *由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。 *你的任务是: *给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。 *输入一行,表示现在看到的密码串(长度不大于1000) *要求输出一个正整数,表示至少脱落了多少个种子。 *例如,输入: *ABCBA *则程序应该输出: *0 *再例如,输入: *ABECDCBABC *则程序应该输出: *3 *资源约定: *峰值内存消耗(含虚拟机) < 256M *CPU消耗 <3000ms * @author Administrator *  */


下面贴出代码

import java.util.Scanner;public class Test160417_1 {private static String inputStr;public static void main(String[] args) {Scanner sc = new Scanner(System.in);inputStr = sc.next();System.out.println(f(inputStr));}private static int count = 0;private static int f(String str) {StringBuffer sb = new StringBuffer(inputStr);int len = str.length();StringBuffer s1 = null;StringBuffer s2 = null;if(len%2==0){//偶数串s1 = new StringBuffer(str.substring(0, len/2));s2 = new StringBuffer(str.substring(len/2));//System.out.println("s1:" + s1 + "  s2:" + s2);}else{//奇数串s1 = new StringBuffer(str.substring(0, (len-1)/2));s2 = new StringBuffer(str.substring((len+1)/2));}if(s1.toString().equals(s2.reverse().toString())){//这个位置表示已经是对称的字符串了return count;}else{count++;StringBuffer sss = new StringBuffer(sb.substring(0,count));sb = sb.append(sss.reverse());}return f(sb.toString());}}

结果:

bababbaa6


0 2