参考原博主(C):https://blog.csdn.net/f_zyj/article/details/51082257
X星球的考古学家发现了一批古代留下来的密码。
这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。
你的任务是:
给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。
输入一行,表示现在看到的密码串(长度不大于1000)
要求输出一个正整数,表示至少脱落了多少个种子。
例如,输入:
ABCBA
则程序应该输出:
0
再例如,输入:
ABECDCBABC
则程序应该输出:
3
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
从开头与末尾开始比较
如果start与end相等 即start+1 end-1并继续比较
如果不相等 则尝试start+1或end-1哪个的值更小
出口:如果刚好 start==6 end==7 并且下标6与7的值刚好相等
那么就会变成 start==7 end==6 则会进入死循环
所以当start>=end时 结束本轮
import java.util.Scanner; public class mi_ma_tuo_luo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String str=sc.next(); System.out.println(w(0, str.length()-1, str)); } static int w(int start,int end,String str){ //遍历完成 if(start>=end) return 0; if(str.charAt(start)==str.charAt(end)) //如果相等即各进一步 return w(start+1, end-1, str); else //从前至后或从后至前 返回最小值 return Math.min(w(start+1, end, str)+1, w(start, end-1, str)+1); } }
在网上刷题时看到的 觉得对学习递归很有帮助 记录下来