华为德科机试

一、题型一

(共两题,每题100分,难度1颗星)

1.一个字符串,首尾相连,计算出现偶数个’o’的字符串最长的长度
例子:

alolobo
输出:6

looxdolx
输出:7

bcbcbc
输出:6

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author AngleWang
 * @datetime 2021-03-05 13:58
 * 通过率100%
 */
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String temp;
        while ((temp=br.readLine())!=null) {
            int length=temp.length();
            int sum=0;
            for(int i=0;i<length;i++) {
                if(temp.charAt(i)=='o') {
                    sum++;
                }
            }
            if(sum%2==0) {
                System.out.println(temp.length());
            } else {
                System.out.println(temp.length()-1);
            }
        }
    }
}

2.从一堆数种取出所有众数,输出中间的那个,如果有偶数个众数,输出中间两个的平均值
用例1:

2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4
3

用例2:

5 1 5 3 5 2 5 5 7 6 7 3 7 11 7 55 7 9 98 9 17 9 15 9 9 1 39
7

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @author AngleWang
 * @datetime 2021-03-05 13:58
 * 通过率:95%
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String temp;
        while ((temp=br.readLine())!=null) {
            //初始化输入
            String[] s = temp.split(" ");
            int[] array=new int[s.length];
            for(int i=0;i<s.length;i++) {
                array[i]=Integer.parseInt(s[i]);
            }

            //计算个数
            int[] result=new int[1000];//1~999
            int max=0;
            for(int i=0;i<s.length;i++) {
                result[array[i]]++;
                if(result[array[i]]>max) {
                    max=result[array[i]];
                }
            }

            //存放众数并计算中位数
            List<Integer> list=new ArrayList<>(s.length/max);
            for(int i=0;i<1000;i++) {
                if(result[i]==max) {
                   list.add(i);
                }
            }

            boolean flag=list.size()%2==0;
            int index=list.size()/2;
            if(!flag) {//奇数个众数
                System.out.println(list.get(index));
            } else {//偶数个众数
                int oo=(list.get(index)+list.get(index-1))/2;
                System.out.println(oo);
            }
        }
    }
}

二、题型二

(共一题,200分,难度两颗星)

第一个数,给出字母的范围,n表示从前n个字母中取
给出字符串
求没有回文子串的下一个字符串
求不出就输出NO

用例1:
3
cba
结果:NO
用例2:
5
cba
结果:cbd

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author AngleWang
 * @datetime 2021-03-05 13:58
 * 通过率65%
 */
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp;
        while ((temp = br.readLine()) != null) {
            int n = Integer.parseInt(temp);
            StringBuilder sb =new StringBuilder(br.readLine());
            int length=sb.length();
            boolean flag0=false;
            for(int i=length-1;i>-1;i--) {//从最后一个到第一个
                boolean flag1=false;//从头到尾改完了,就可以break;

                for(int j=i;j<length;j++) {//从i改到最后
                    boolean flag=false;
                    for(int k=sb.charAt(j)+1;k<n+'a';k++) {//遍历字母
                        if((j<1||k!=sb.charAt(j-1))&&(j<2||k!=sb.charAt(j-2))) {//不等于前一个也不等于前前个
                            flag=true;
                            sb.replace(j,j+1,""+(char)k);
                            break;
                        }
                    }
                    if(!flag) {
                        break;
                    }
                    if(flag&&j==length-1) {
                        flag1=true;
                    }
                }

                if(flag1) {
                    flag0=true;
                    break;
                }
            }

            if(flag0) {
                System.out.println(sb);
            } else  {
                System.out.println("NO");
            }
        }
    }

}
  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值