某书2018笔试题之字符串中最大子数字串
Posted AI菌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某书2018笔试题之字符串中最大子数字串相关的知识,希望对你有一定的参考价值。
一、题目
输入一个字符串,该字符串由‘0’-‘9’和大写字母组成,输出该字符串中最大数字,如果有‘RED‘字符串,则可以消除。如果都为字符,则返回-1。
例如:
输入字符串为:ABC224DS33RED4F,则其中的数字有224,334(RED可以消除),因此,最大的数字为334
输入字符串:AAAFWE,返回-1
注意:
考虑到溢出,要用BigInteger
二、思路
详见代码
三、代码
解法一的代码:
package redbook3; /* 题目: 输入一个字符串,该字符串由‘0’-‘9’和大写字母组成,输出该字符串中最大数字,如果有‘RED‘字符串,则可以消除。如果都为字符,则返回-1。例如: 输入字符串为:ABC224DS33RED4F,则其中的数字有224,334(RED可以消除),因此,最大的数字为334 输入字符串:AAAFWE,返回-1 注意: 考虑到溢出,要用BigInteger */ import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); while (in.hasNext()){ //输入字符串 String str=in.nextLine(); //调用方法 String maxNum=method(str); //输出最大数字 System.out.println(maxNum); } in.close(); } public static String method(String str) { //最大的数字 BigInteger maxNum = new BigInteger("-1"); //删除RED String strTemp=str.replace("RED",""); //替换大写字母,全部换成‘a’ String strNew=strTemp.replaceAll("[A-Z]","a"); //以一个或者多个‘a’分割 String[] strings=strNew.trim().split("a+"); //找最大值 for(int i=0;i<strings.length;i++){ if(strings[i].equals("")){ continue; }else if(new BigInteger(strings[i]).compareTo(maxNum)>0){ maxNum=new BigInteger(strings[i]); } } //都是字符 if(maxNum.toString().equals("-1")){ return "-1"; } return maxNum.toString(); } }
解法二的代码:
package redbook3; /* 题目: 输入一个字符串,该字符串由‘0’-‘9’和大写字母组成,输出该字符串中最大数字,如果有‘RED‘字符串,则可以消除。如果都为字符,则返回-1。例如: 输入字符串为:ABC224DS33RED4F,则其中的数字有224,334(RED可以消除),因此,最大的数字为334 输入字符串:AAAFWE,返回-1 注意: 考虑到溢出,要用BigInteger */ import java.math.BigInteger; import java.util.Scanner; public class Main2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String s = in.nextLine(); System.out.println(solve(s)); } in.close(); } public static String solve(String s) { //判断字符串里面有没有数字 boolean find = false; for (int i = 0; i < s.length(); i++) { if (Character.isDigit(s.charAt(i))) { find = true; break; } } if (!find) return "-1"; BigInteger maxNum = new BigInteger("-1"); int i = 0; BigInteger curNum = new BigInteger("0"); while (i < s.length()) { if (Character.isDigit(s.charAt(i))) { int num = s.charAt(i) - ‘0‘;//字符转换成数字 curNum = curNum.multiply(new BigInteger("10")).add(new BigInteger("" + num)); i++; } else { //判断有没有‘RED’ if (i + 3 <= s.length() && s.substring(i, i + 3).equals("RED")) { i += 3; continue; } else { //保存当前最大的数字串 if (curNum.compareTo(maxNum) > 0) { maxNum = curNum; } curNum = new BigInteger("0"); i++; } } } if (curNum.compareTo(maxNum) > 0) { maxNum = curNum; } return maxNum.toString(); } }
---------------------------------------------
参考链接:
http://blog.csdn.net/wunengbiao/article/details/78127825
以上是关于某书2018笔试题之字符串中最大子数字串的主要内容,如果未能解决你的问题,请参考以下文章