年薪35万的华为机试题,你完成需要多长时间?

本文分享了一位朋友在华为机试中遇到的年薪35万岗位的编程题目,包括寻找最长连续字符串、最长数字串、重复字符排序、去重排序、最大公共子串和连续子串计数等问题。解题思路涵盖字符串遍历、ASCII比较和动态规划等方法。读者可以尝试在无网络环境下独立解决这些问题,测试自己的编程能力。
摘要由CSDN通过智能技术生成

最近一个朋友通过了华为的面试,需要去参加华为机试,具体什么岗位我就不说了,说年薪可以达到35~40万元,当然了,拿这个年薪在华为应该算是一般水平了,但是相比社会上的其他企业,这样的工资还是蛮吸引人的,回来的时候,给我们分享了一下机试的题目。

题目描述

  给定一串字符,里面有些字符有连续出现的特点,请寻找这些连续字符串中最长的串,如果最长的串有多个,请输出ascii最小的一串?

测试字符串

  321,23322a1,12fffdddaa23

答题要求

  答题时间限制在90分钟以内,不可以上网查询,可以使用Java/Python/C#等任何语言实现。

解题思路

  从第一个字符开始,遍历循环每一个字符,利用maxBegin和maxEnd来记录当前连续出现的子字符串的起始位置,如果当前字符串长度大于历史最大字符串长度,或者两者长度一样,但当前的字符串ASCII码小于之前的,就要用当前的字符串覆盖历史最长的字符串,这里要注意最后一个字符的边界问题。

  当我这个朋友在给我们分享面试题目的时候我还在想,就这么一道题还需要90分钟吗?如果开发环境具备,半个小时肯定搞定,于是晚上回家以后,打开电脑思考编写,果然半个小时没有搞定,折腾了一个小时才搞定,具体代码如下:

public class CalcFunc {
    public static String MaxRepeatString(String str){
        if(str==null||str.trim().length()==0){
            return "";
        }
        if(str.length()<2){
            return str;
        }
        int maxBegin = 0;
        int maxEnd = 1;
        char [] charString = str.toCharArray();
        String tempStr = "";
        String maxLenStr = "";
        for(int i=0;i<charString.length-1;i++){
            maxEnd = i+1;
            if(charString[i]==charString[i+1]){
                tempStr = str.substring(maxBegin, maxEnd+1);
            }else {
                tempStr = str.substring(maxBegin, maxEnd);
                maxBegin = maxEnd;//不相等时,改变截取字符串的开始位置
            }
            if(tempStr.length()>maxLenStr.length()){
                maxLenStr = tempStr;
            }else if(tempStr.length()==maxLenStr.length()&&maxLenStr.length()>0){
                if((int)(tempStr.charAt(0))<(int)(maxLenStr.charAt(0))) {
                    maxLenStr = tempStr;
                }
            }
            if(maxEnd==charString.length-1){//最后一次遍历,并且
                if(maxLenStr.length()==1){
                    if((int)(charString[charString.length-1])<(int)(maxLenStr.charAt(0))) {
                        maxLenStr = String.valueOf(charString[charString.length-1]);
                    }
                }
            }
        }
        return maxLenStr;
    }
    while (true) {
     System.out.println("请输入给定的字符串!");
     Scanner input = new Scanner(System.in);
     String st = input.nextLine();
        System.out.println(MaxRepeatString(st));
    }
}

在做完上述题目以后,通过百度搜索了一下华为的机试题,发现还有其他类似的机试题,下面是我整理的几道机试题及实现方式。

一、题目一

题目描述

  在字符串中找出连续最长的数字串,并把这个串的长度返回。如果存在长度相同的连续数字串,返回最后一个连续数字串。

解题思路

  遍历该字符串每一个字符,判断当前字符是否为数字(可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值