日期:2014-05-20  浏览次数:20709 次

寻最优算法:关于项目中机构代码上下级判断的问题
某机构的机构代码按照以下方式设置:
如机构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);
    }