码迷,mamicode.com
首页 > 其他好文 > 详细

某书2018笔试题之字符串中最大子数字串

时间:2017-10-25 23:59:52      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:main   ati   substr   opened   bsp   java   logs   删除   溢出   

一、题目

输入一个字符串,该字符串由‘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();
    }
}
View Code

解法二的代码:

技术分享
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();
    }
}  
View Code

---------------------------------------------

参考链接:

http://blog.csdn.net/wunengbiao/article/details/78127825

 

某书2018笔试题之字符串中最大子数字串

标签:main   ati   substr   opened   bsp   java   logs   删除   溢出   

原文地址:http://www.cnblogs.com/hezhiyao/p/7732506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!