目录
牛客_游游的字母串_枚举
描述:
对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。'a'和'b'相邻,'b'和'c'相邻,以此类推。特殊的,'a'和'z'也是相邻的。可以认为,小写字母的相邻规则为一个环。
游游拿到了一个仅包含小写字母的字符串,她想知道,使得所有字母都相等至少要多少次操作?
输入描述:
一个仅包含小写字母,长度不超过100000的字符串。
输出描述:
一个整数,代表最小的操作次数。
题目解析
英文字母一共就26个,因此可以直接暴力枚举以每个字母作为最后的转变字母。最后去最小值即可。
C++代码
cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string str;
cin >> str;
int res = 1e9;
for(char ch = 'a'; ch <= 'z'; ++ch)
{
int cnt = 0;
for(auto e : str)
{
cnt += min(abs(e - ch), 26 - abs(e - ch));
}
res = min(res, cnt);
}
cout << res << endl;
return 0;
}
Java代码
cpp
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
char[] s = in.next().toCharArray();
int ret = (int)1e9;
for(char ch = 'a'; ch <= 'z'; ch++)
{
int sum = 0;
for(int i = 0; i < s.length; i++)
{
sum += Math.min(Math.abs(s[i] - ch), 26 - Math.abs(s[i] - ch));
}
ret = Math.min(ret, sum);
}
System.out.println(ret);
}
}