寻最优算法:关于项目中机构代码上下级判断的问题
某机构的机构代码按照以下方式设置:
如机构A=1000000000
则其下级机构表示为10??000000,??表示两位非零数字,以此类推。
例如:如果机构B=1050000000,则机构代码1050010000,1050990000都可以表示为其下级,相反,105003010000则表示其下级的下级。
现在给出两个字符串,要求验证其是否直接上下级关系。
String s1 = "1008000000";
String s2 = "1008010000";
判断s2是否s1的下级
要求写出最优算法
------解决方案--------------------看有没有 正则表达式的牛人
用正则应该是最优的
------解决方案--------------------不知道你上下级的代码长度是否一样!如果一样的话你可以试试我这方法。
public boolean judge(String s1, String s2) {
int point = 0;
for (int i = 0; i < s1.length(); i++) {
try {
String sub1 = s1.substring(i, i + 1);
String sub2 = s2.substring(i, i + 1);
if (!sub1.equals(sub2)) {
point = i + 1;
break;
}
} catch (Exception e) {
}
}
String result = s2.substring(point, point + 2);
if (!result.equals("00")) {
return false;
}
return true;
}
------解决方案--------------------同楼上,等正则
------解决方案--------------------说句题外话,虽然客户是通过机构代码的编码格式描述上下级的,但是系统中最好通过增加一个父级机构的字段去描述这种关系。
------解决方案--------------------若按9楼的程序, String s1 = "10110100";
String s2 = "10110101111111111111";
结果: s2 也是s1的直接下级
对于题目还有以下疑问,
"如果机构B=1050000000,则机构代码1050010000,1050990000都可以表示为其下级,"
怎么确定 1050100000,1059900000(是) 不是他的下级?也就是怎么标志头部
------解决方案--------------------就是在去掉s1的所有尾部0之后,在后面添加任意两位的数字01~99
s1 = "10500000000" -> "105" -> ...
------解决方案--------------------仅供参考:
Java code
public static void main(String args[]){
String str1="1008000000";
String str2="1008010200";
str1=str1.replaceAll("00", "");
str2=str2.replaceAll("00", "");
int numSpan=2; //
int i=(str2.length()-str1.length())/numSpan;
System.err.println(str1);
System.err.println(str2);
System.err.println(i);
}