首页 > 试题广场 >

小红的字符串修改

[编程题]小红的字符串修改
  • 热度指数:7546 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\,\,\,\,\,\,\,\,\,\,小红有一个由小写字母构成的字符串 s,每次她可以把其中一个任意一个字母替换成其在字母表中相邻的字母,例如把 'a' 替换成 'b' 或者 'z'。现在小红想知道,最少需要替换多少次,使得 s 成为 t子串

\,\,\,\,\,\,\,\,\,\,如果字符串 t 可以通过从字符串 s 的开头删除若干(可能为零或全部)字符以及从结尾删除若干(可能为零或全部)字符得到,则字符串 t 是字符串 s子串

输入描述:
\,\,\,\,\,\,\,\,\,\,第一行输入一个长度不超过 10^3 ,且仅由小写字母构成的字符串 s 代表小红手中待替换的串。
\,\,\,\,\,\,\,\,\,\,第二行输入一个长度不小于 s 但不超过 10^3 ,且仅由小写字母构成的字符串 t 代表目标串。


输出描述:
\,\,\,\,\,\,\,\,\,\,在一行上输出一个整数,代表最少需要替换的次数。
示例1

输入

abc
abbc

输出

1

说明

\,\,\,\,\,\,\,\,\,\,需要进行一次替换,将 '\tt c' 替换成 '\tt b' ,此时得到 "\tt abb" ,是 "\tt abbc" 的子串,因为本质上是由 "\tt abbc" 末尾删除了一个字符得到的。
示例2

输入

zzzzzz
xyzabc

输出

9
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let s = '', t = '', sLen = 0, tLen = 0;
const chartCode = "a".charCodeAt(0);
rl.on('line', function (line) {
    const tokens = line.split(' ');
    if(s === ''){
        s = tokens[0];
        sLen = s.length;
        return
    }
    t = tokens[0];
    tLen = t.length;
   
    const sCharCodeList = s.split('').map(val=> {return val.charCodeAt(0) - chartCode})
    const tCharCodeList = t.split('').map(val=> {return val.charCodeAt(0) - chartCode})

    let result = null;
    for(let i = 0; i < tLen - sLen; i++){
        let count = 0;
        for(let n = 0; n < sCharCodeList.length; n++){
            const diff =  Math.abs(sCharCodeList[n] - tCharCodeList[n + i])
            count += Math.min(diff, 26 - diff)
        }
        if(result === null){
            result = count
        }
        if(count < result){
            result = count
        }
    }
    console.log(result)
});
发表于 2025-10-17 10:30:08 回复(0)