最远足迹
题目描述
某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。
仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0<x<1000,0<y<1000。同时存在非法坐标,如(01,1)、(1,01),(0,100)属于非法坐标。
设定探险队总部的坐标为(0,0),某位置相对总部的距离为:xx+yy。
若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。
若记录仪中的坐标都不合法,输出总部坐标(0,0)。
备注:
不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。
输入描述
字符串,表示记录仪中的数据。
如:ferga13fdsf3(100,200)f2r3rfasf(300,400)
输出描述
字符串,表示最远足迹到达的坐标。如: (300,400)
输入 | 输出 | 说明 |
---|---|---|
ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10) | (5,10) | 记录仪中的合法坐标有3个: (3,10), (3,4), (5,10),其中(5,10)是相距总部最远的坐标, 输出(5,10)。 |
asfefaweawfaw(0,1)fe | (0,0) | 记录仪中的坐标都不合法,输出总部坐标(0,0) |
源码和解析
解析:
该题解决的核心就在从字符串中取出合法的坐标 使用合适的正则匹配可以使得问题变得简单。
示例代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class T20 {public static void main(String[] args) {String input = "ferg(03,100)a13fdsf3(3,04)f2r3rfasf(5,10)";// String input="asfefaweawfaw(0,1)fe";// String input="ferg(3,10)a13fdsf3(6,10)f2r3rfasf(5,10)";StringBuilder inputBuilder = new StringBuilder(input);// (3,10)√ (03,10) (1,01),(0,100) ×==>x,y坐标都不能0开头String reg = "\\([1-9]{1}[0-9]{0,2},[1-9]{1}[0-9]{0,2}\\)";Pattern pattern = Pattern.compile(reg);Matcher matcher = pattern.matcher(inputBuilder.toString());String objPosition = "(0,0)";int max = 0;while (matcher.find()) {String positionStr = input.substring(matcher.start(), matcher.end());inputBuilder.setCharAt(matcher.start(), '_');// 破坏原始结构中第一个满足的// 接着找第其他的...matcher = pattern.matcher(inputBuilder.toString());// System.out.println(positionStr);String xy[] = positionStr.replace("(", "").replace(")", "").split(",");int x = Integer.parseInt(xy[0]);int y = Integer.parseInt(xy[1]);if (x * x + y * y > max) {max = x * x + y * y;objPosition = positionStr;}}System.out.println(objPosition);}
}