百度2015实习生招聘笔试
题目描述
在命令行中输入一个字符串,例如“aAfbgg”,要求按照一定的规则计算此字符串拆分后字符的值相加后的总和值。规则如下:
- a与A值为1,b与B值为2,….z与Z值为26
- 大写的字符相当于两个小写的字符,例如“aAcb”=“aaacb”
- 如果字符串中存在连续重复相等的字符(不分大小写),则连续相等的k个字符的总和值为k*k*字符值,例如:aa 总和值为2*2*1。
思想:新建一个和字符串长度长度相等的int类型的数组a,a中的所有初始值为0,找出重复字符的次数
填入到与字符串中连续重复相等的子字符串的初始下标对应的下标数组a中。若不重复,在数组a对应的位置填1。最后,总和sum=a[1]*a[1]*字符值+……..+a[n]*a[n]*字符值。
关键点:判断重复次数并记录
java代码
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int input=in.nextInt();
for(int i=0;i<input;i++){
String dd=in.next();
int length=dd.length();
char[] cha=new char[length];
int[] count=new int[length];
for(int k=0;k<length;k++){
cha[k]=dd.charAt(k);
count[k]=0;
}
for(int j=0;j<length;){
if((cha[j]-'a')<0){
count[j]=2;
}else{
count[j]=1;
}
int index=j;
int nextindex=j+1;
while(nextindex<length){
int as=cha[index]-cha[nextindex];
if(as==0||as==32||as==-32){
int intever=cha[nextindex]<'a'?2:1;
count[index]+=intever;
nextindex++;
}else{
break;
}
}
j=nextindex;
}
int sum=0;
for(int h=0;h<length;h++){
int val=cha[h]<'a'?cha[h]-'A'+1:cha[h]-'a'+1;
sum+=count[h]*count[h]*val;
}
System.out.println("sum:"+sum);
}
}