目錄
牛客_游游的字母串_枚舉
題目解析
C++代碼
Java代碼
牛客_游游的字母串_枚舉
游游的字母串
描述:
對于一個小寫字母而言,游游可以通過一次操作把這個字母變成相鄰的字母。'a'和'b'相鄰,'b'和'c'相鄰,以此類推。特殊的,'a'和'z'也是相鄰的。可以認為,小寫字母的相鄰規則為一個環。
游游拿到了一個僅包含小寫字母的字符串,她想知道,使得所有字母都相等至少要多少次操作?
輸入描述:
一個僅包含小寫字母,長度不超過100000的字符串。
輸出描述:
一個整數,代表最小的操作次數。
題目解析
????????英文字母一共就26個,因此可以直接暴力枚舉以每個字母作為最后的轉變字母。最后去最小值即可。
C++代碼
#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代碼
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);}
}