百度2015实习生招聘笔试

百度2015实习生招聘笔试

题目描述

在命令行中输入一个字符串,例如“aAfbgg”,要求按照一定的规则计算此字符串拆分后字符的值相加后的总和值。规则如下:

  1. a与A值为1,b与B值为2,….z与Z值为26
  2. 大写的字符相当于两个小写的字符,例如“aAcb”=“aaacb”
  3. 如果字符串中存在连续重复相等的字符(不分大小写),则连续相等的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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值