蓝桥杯—— 密码脱落

密码脱落

X星球的考古学家发现了一批古代留下来的密码。
这些密码是由A、B、C、D 四种植物的种子串成的序列。
仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。

你的任务是:
给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。

输入一行,表示现在看到的密码串(长度不大于1000)
要求输出一个正整数,表示至少脱落了多少个种子。

例如,输入:
ABCBA
则程序应该输出:
0

再例如,输入:
ABDCDCBABC
则程序应该输出:
3

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

 

首先给大家举一个小例子

1231 有两种加法

先判断第一位1,和最后一位1 相等 继续下两个数

判断第二位2,和倒数第二位3  不相等

这时候有两种方法

1.    复制第二位,生成123(2)1;这样就可以继续读1231的第三位和倒数二位   即判断3

2.    复制倒数第二位,生成1(3)231;这样就可以继续读1231的第二位和倒数三位 即判断2

import java.util.Scanner;
 
public class Dome10 {
    private static int count;
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String temp=sc.next();
        count=temp.length();
        int num=0;
        check(0,temp.length()-1,temp,num);
        System.out.println(count);
    }
    
    private static void check(int left, int right, String temp, int num) {
        // TODO 自动生成的方法存根
        if(left>=right)
        {
            if(num<count)
            {
                 count=num;
            }
        }else {
            //判断相等 继续下两个数
            if(temp.charAt(left)==temp.charAt(right))
            {
                check(left+1,right-1,temp,num);
            }else {
                //one  复制第二位,生成123(2)1;这样就可以继续读1231的第三位和倒数二位   即判断3 因为添加了数字2所以num+1
                check(left+1,right,temp,num+1);
                //two  复制倒数第二位,生成1(3)231;这样就可以继续读1231的第二位和倒数三位 即判断2  因为添加了数字3所以num+1
                check(left,right-1,temp,num+1);            
            }
        }
    }  
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×