题目描述

请在一个字符串中找出连续最长的数字串,并返回这个数字串。如果存在长度相同的连续数字串,则返回最后一个。如果没有符合条件的字符串,返回空字符串""

注意

数字串可以由数字"0-9"、小数点"."、正负号"+-"组成,长度包括组成数字串的所有符号。"."、"+-"仅能出现一次,"."的两边必须是数字,"+-"仅能出现在开头且其后必须要有数字。输入字符串长度不定,可能含有空格。

输入描述

一行字符串

输出描述

符合题意的连续数字串或空串

输入输出示例

序号样例输入样例输出说明
11234567890abcd9.+12345.678.9ed+12345.678

题目解析

此题可用正则表达式,但是通过率只有85%。此题也可以用双指针做法,但是通过率依然只有85%。大家可以尝试下其他方法,贡献下测试用例。下面的代码均是基于正则表达式做法。

C++源码

#include<iostream>
#include<string>
#include<algorithm>
#include<regex>
using namespace std;

string check(const string &ss) {
    regex reg("[+-]?[0-9]+(\\.[0-9]+)?");
    string::const_iterator iter=ss.begin();
    string ans;
    smatch res;
    while(regex_search(iter, ss.end(),res,reg)) {
        string tmp = res[0];
        int n = tmp.size();
        if(n>=ans.size()) {
            tmp.swap(ans);
        }
        iter = res[0].first;
        while(++iter!=res[0].second && (*iter)!='.')
            ;
    }
    return ans;
}
int main() {
    string ss;
    while(getline(cin, ss)) {
        cout << check(ss) << endl;
    }
    return 0;
}

python源码

import re
strs = input().strip()
t = "[+-]?\d+(\.\d+)?"
def fun():
    ans = ""
    n = len(strs)
    for i in range(n):
        tmpL = re.search(t,strs[i:])
        if tmpL:
            for j in range(len(tmpL.groups()) ):
                T = tmpL.group(j)
                m = len(T)
                if m >= len(ans):
                    ans = T
    return ans
res = fun()
print(res)

Java源码

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine().trim();
        String pattern = "[+-]?\\d+(\\.\\d+)?";
        String res = "";
        for (int i = 0; i < s.length(); i++) {
            String temp = s.substring(i);
            Matcher matcher = Pattern.compile(pattern).matcher(temp);
            if (matcher.find()) {
                if (matcher.group(0).length() >= res.length()) {
                    res = matcher.group(0);
                }
            }
        }
        System.out.println(res);
    }
}
最后修改:2023 年 10 月 29 日
如果觉得我的文章对你有用,请随意赞赏