列表

详情


NC255195. 游游的字母串

描述

对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。'a'和'b'相邻,'b'和'c'相邻,以此类推。特殊的,'a'和'z'也是相邻的。可以认为,小写字母的相邻规则为一个环。
游游拿到了一个仅包含小写字母的字符串,她想知道,使得所有字母都相等至少要多少次操作?

输入描述

一个仅包含小写字母,长度不超过100000的字符串。

输出描述

一个整数,代表最小的操作次数。

示例1

输入:

yab

输出:

3

说明:

第一次操作,把'y'变成'z',字符串变成了"zab"
第二次操作,把'b'变成'a',字符串变成了"zaa"
第三次操作,把'z'变成'a',字符串变成了"aaa"

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 7ms, 内存消耗: 632K, 提交时间: 2023-07-16 19:12:27

#include<bits/stdc++.h>
using namespace std;

string s;
int mi=1e9;

int main(){
	cin>>s;
	for(char ch='a';ch<='z';ch++){
		int tot=0;
		for(int i=0;i<s.size();i++)
			tot+=min(26-abs(s[i]-ch),abs(s[i]-ch));
		mi=min(mi,tot);
	}
	cout<<mi;
}

Python3 解法, 执行用时: 1423ms, 内存消耗: 4808K, 提交时间: 2023-07-16 20:55:51

s = input()
dp = [0 for x in range(26)]
for x in s:
    c = ord(x) - ord('a')
    for i in range(26):
        dp[i] += min(abs(c - i), 26 - abs(c - i))
print(min(dp))

pypy3 解法, 执行用时: 131ms, 内存消耗: 23388K, 提交时间: 2023-07-16 19:25:17

s=input()
ans=1000000000
for i in range(26):
    cur=0
    for y in s:
        y=abs(ord(y)-ord('a')-i)
        cur+=min(y,26-y)
    ans=min(ans,cur)
print(ans)

上一题