题目描述
注意点
首先是思考问题:
一共可以走k步求可能靠拢的最多,最后字符都相等。
字符相等->每个字符都算一下在有限步骤k下能选多少->该变那些呢->应该先变距离它最近的->数组存储。
memset函数->Arrays.fill函数。
package Learn;
import java.util.Arrays;
import java.util.Scanner;
public class niuniustringii {
public int string2 (int k, String s) {
// write code here
int max=0;
int len=s.length();
int[] a=new int[26];
for(int i=0;i<len;i++){
char c=s.charAt(i);
Arrays.fill(a, 0);
for(int j=0;j<len;j++){
int ans=Math.abs(s.charAt(j)-c);
a[ans]++;
}
for(int j=0;j<len;j++) System.out.print(a[j]+" ");
System.out.println();
int sum=0;
int x=0;
for(int j=0;j<26;j++){
if(a[j]!=0){
sum+=j*a[j];
if(sum<=k){
x+=a[j];
}
else{
sum-=j*a[j];
x+=(k-sum)/j;
break;
}
}
System.out.print(x+" ");
}
System.out.println();
System.out.println(x);
System.out.println(max);
max=Math.max(max, x);
}
return max;
}
public static void main(String[] args) {
niuniustringii n=new niuniustringii();
Scanner scanner=new Scanner(System.in);
int k=Integer.parseInt(scanner.nextLine());
String s=scanner.nextLine();
int max=n.string2(k, s);
System.out.println(max);
scanner.close();
}
}