一行输入一个长度不超过
的小写字母字符串
。
在一行上输出一个整数,代表把
变成回文串的最少操作次数。
abcd
4
一种可行方案:(共
次操作)。
nuhhhh
19
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
int len = s.length();
int sum = 0;
for (int i = 0; i < len / 2; i++) {
char a = s.charAt(i);
char b = s.charAt(len - 1 - i);
// 计算两个字符的最小距离(循环右移次数)
int diff = Math.abs(a - b);
sum += Math.min(diff, 26 - diff);
}
System.out.println(sum);
}
}
import java.util.*;
import java.io.*;
//下标为i和下标为n-1-i的字符是一组c1和c2。
//c1操作和c2操作一个右移到另一个是最短的,
//两个都移动为第三个字符的情况一定会比单个移动到另一个的移动次数多,因为可假设第三字符在两个字符之间或两字符之外循环单向移动都会更长
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
char[] input=bf.readLine().toCharArray();
int min=0;
for(int a=0,b=input.length-1;a<b;a++,b--){
int c1c2=(input[a]-input[b]+26)%26;//c1右移到c2 取模为正取正,为负取正向移动的另一半距离。
int c2c1=(input[b]-input[a]+26)%26;//c2右移到c1
min+=Math.min(c2c1,c1c2);
}
System.out.println(min);
}
}