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); }

浙公网安备 33010602011771号