题目来源
题目描述
题目解析
分析
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <functional>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
#define needDebug false;
//比如:11.22222.333333
//合法:12、+001、-1.1
//非法:++1、+.1、1.、-00.
// 考虑以nums[i]作为结尾时的合法字符串
// 11+233.984
/*
* 思路:先搞出可能有哪些索引可以作为起点和终点
* - 当str[i]是数字,但str[i - 1]不是数字时,它是起点,也可以作为终点
* - 有两个需要特殊处理的:
* str[0]如果是数字,那么加入0
* str[N - 1]如果是数字,
*
* */
std::string process(std::string line){
if(line.empty()){
return "";
}
std::vector<int> data;
if(isdigit(line[0])){
data.push_back(0);
}
for (int i = 1; i < line.size(); ++i) {
if(isdigit(line[i]) ^ isdigit(line[i - 1])){
data.push_back(i);
}
}
if(isdigit(line.size() - 1)){
data.push_back(line.size());
}
std::string ans;
for (int i = 0; i < data.size() / 2; ++i) {
int start = data[i * 2];
int end = data[i * 2 + 1];
if(start != 0){
if(line[start - 1] == '+' || line[start - 1] == '-'){
start = start - 1;
}
}
if(end < line.size() && line[end] == '.' && (i + 1) * 2 < data.size() && data[(i + 1) * 2] == end + 1){
end = data[(i + 1) * 2 + 1];
}
if(ans.size() <= end - start){
ans = line.substr(start, end - start);
}
}
return ans;
}