ABC147 B - Palindrome-philia

備忘録

問題

atcoder.jp

回答

"use strict"
function Main(input) {
  input = input.trim().split('');
  const len = input.length;
  
  let ret = 0;
  if(len%2 === 0){
    let pre = input.slice(0, len/2);
    let bak = input.slice(len/2, len).reverse();
    let max = pre.length;
    
    for(let i=0; i<max; i++){
      if(pre[i] !== bak[i]) ret += 1;
    }
  } else {
    let pre = input.slice(0, len/2);
    let bak = input.slice(len/2+1, len).reverse();
    let max = pre.length;
 
    for(let i=0; i<max; i++){
      if(pre[i] !== bak[i]) ret += 1;
    }
  }
 
  console.log(ret);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

考え方

文字列(S(の文字数が偶数の場合と文字列の文字数が奇数の場合で条件が異なる。
偶数の場合には、文字列の前半分と後ろ半分で異なる文字数の数を計測することで回文にするために必要な回数が判明する。
奇数の場合には、文字列の中央の文字はどのような文字であっても回文になるため、無視する。
その後、文字列の前半分と後ろ半分で異なる文字数を計測することで、回文にするために必要な回数が判明する。