描述
某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。
1.仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0<x<1000,0<y<1000。同时存在非法坐标,如(01,1)、(1.01),(0.100)属于非法坐标。
2.设定探险队总部的坐标为(0,0),某位置相对总部的距离为:x“x+y"y。
3.若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。
4.若记录仪中的坐标都不合法,输出总部坐标(0.0)。
备注:
不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。
输入描述:
字符串,表示记录仪中的数据。
如:ferga13fdsf3(100,200)f2r3rfasf(300,400)。
输出描述:
字符串,表示最远足迹到达的坐标。
如 :(300,400)。
用例:
输入:
ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)f2r3rfasf(10,5)
输出:
(5,10)
java实现
package com.des.data.test;
import java.util.HashMap;
public class FarthestFootprint {
public static void main(String[] args) {
String str = "ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)f2r3rfasf(10,5)";
System.out.println(farthest(str));
}
public static String farthest(String str) {
int f = 0;
HashMap<Integer, String> resMap = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
StringBuffer strl = new StringBuffer();
if (c == '(') {
strl.append(c);
StringBuffer strLen = new StringBuffer();
for (int j = i + 1; j < str.length(); j++) {
char d = str.charAt(j);
strl.append(d);
if (d == ')') {
break;
}
strLen.append(d);
}
String[] trslen = strLen.toString().split(",");
String s = trslen[0];
String e = trslen[1];
int si = Integer.parseInt(s);
int el = Integer.parseInt(e);
if (!s.startsWith("0") && si > 0 && el < 1000 && !e.startsWith("0")) {
int resl = si * si + el * el;
if (resl > f) {//这一步可以找到相同距离下最先搜索到的那个点
f = resl;
resMap.put(f,strl.toString());
}
}
}
}
return resMap.get(f);
}
}