2021 网易 测试岗笔试编程题1

记录一下师姐的笔试:

题目描述:

给定一个字符串,输出对应的数字,转换规则:

1.26个英文字母字符(不区分大小写,即a=A), 次序分别对应1-26个数字,即a=1,b=2....z=26

2.剔除非数字和非字母的字符。

3.对字母和数字分别按照字典序和大小进行升序排列,且在所有字母均在数字前。

4.按字母顺序连续出现多个字母,仅转换为最后一个字母,如abc转换为c,aa不是字母顺序连续,ab是字母顺序连续。

注:若没有数字和字母,返回0.

 

给个大概的暴力解法:

    public static void main(String [] args){

        String res="";
        Scanner input=new Scanner(System.in);         //输入
        String s=(input.nextLine());
        s = s.replaceAll("[^0-9a-zA-Z]","");   //去除数字和字母

        s=s.toLowerCase(Locale.ROOT);           //全变为小写
        char [] chars=s.toCharArray();
        Arrays.sort(chars);
        //System.out.println(chars.toString());
        String s1="";
        for(int i=0;i<chars.length;i++)
        {
            s1+=chars[i];                    //s1为排序后去除数字和字母的String
        }

       int index=0;                          //找到数字和字母的分界index
        for(int i=0;i<chars.length;i++)
        {
            if(!((chars[i]>='a'&&chars[i]<='z')||(chars[i]>='A'&&chars[i]<='Z')))
                continue;
            index=i;
            break;
        }

        String nums=s1.substring(0,index);   //这部分是数字
        StringBuffer letter=new StringBuffer(s1.substring(index,s1.length()));  //这部分是字母

        for(int i=0;i<letter.length()-1;i++)
        {
            if(letter.charAt(i+1)==letter.charAt(i)+1)
                continue;
            else
                res+=letter.charAt(i);
        }                                             //缩进字母(去除连在一起的字母)
        res+=letter.charAt(letter.length()-1);

        String result="";                            //最后结果放在result中
        for(int i=0;i<res.length();i++)              //
        {
            int temp =(int)res.charAt(i)-96;
            result+=String.valueOf(temp);
        }
                result+=nums;                       //末尾加上数字部分
        System.out.print(result);
    }

 

posted @ 2021-08-30 09:08  毅毅毅毅毅  阅读(139)  评论(0)    收藏  举报