首页 > 试题广场 >

小红的字符串

[编程题]小红的字符串
  • 热度指数:2357 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红拥有一个长度为 n 的小写字母字符串 s。她可以重复执行如下操作任意次:
\hspace{23pt}\bullet\, 选择一个下标 i\ (1\leqq i\leqq n),将字符 s_i 循环右移到字母表中的下一个字母。特别地,``\texttt{z}`` 右移后变成 ``\texttt{a}``。
\hspace{15pt}
\hspace{15pt}请计算,使 s 变为回文串所需的最少操作次数。

\hspace{15pt}【名词解释】回文串:一个字符串从左往右与从右往左读完全相同。

输入描述:
\hspace{15pt}一行输入一个长度不超过 1000 的小写字母字符串 s


输出描述:
\,\,\,\,\,\,\,\,\,\,在一行上输出一个整数,代表把 s 变成回文串的最少操作次数。
示例1

输入

abcd

输出

4

说明

一种可行方案:\texttt{(共 4 次操作)。
示例2

输入

nuhhhh

输出

19
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    function minOperationsToPalindrome(s) {
        const n = s.length;
        let count = 0;

        for (let i = 0; i < Math.floor(n / 2); i++) {
            const left = s.charCodeAt(i) - 97; // 'a' -> 0
            const right = s.charCodeAt(n - 1 - i) - 97;

            const diff = Math.abs(left - right);
            count += Math.min(diff, 26 - diff);
        }

        return count;
    }

    while ((line = await readline())) {
        console.log(minOperationsToPalindrome(line));
    }
})();

发表于 2025-10-06 18:53:12 回复(0)