计算字母不匹配的比例

时间:2017-02-01 04:31:34

标签: java algorithm

  

给定参考字符串X和电子串Y,计算X在Y中不发生的百分比。   含义:例如X = ABCDY = ABCDABRR然后我们的百分比为2/8 = 0.25,因为2RR与ABCD = X没有对齐,还有一个例子, X = ABCD, Y = ABCDABRD然后是1/8。

public static void main(String[] args) {
String mainS = "ABCDEABCDERRCRR";
String ref = "ABCDE";
double fails = 0; //count the fails.
double len = mainS.length(); //length of main String.
for(int i = 0; i < len; i++){
    String charAti = mainS.substring(i, i+1);
    if(ref.contains(charAti)){
       //PASS
    } else{
     ++fails;
    }
}
double ratio = fails/len;
System.out.println("Failure ratio is: " + ratio);

}

这可行,我相信O(N),但我可以加快速度吗?

1 个答案:

答案 0 :(得分:1)

对于您提供的参数,其中ref很短,这是一种非常合理的方法。但是,您多次调用contains()。 Java文档没有指定此函数的实现或复杂性,但在一般情况下,需要查看一个字符串是否包含另一个字符串,因此每次调用contains()的成本可能至少会线性增长搜索字符串的长度。您的复杂性可能更准确地描述为O(mn),其中m和n是所涉及的两个字符串的长度。

如果您使用ref字符串填充HashSet字符,并且测试mainS中的每个字符以查看是否包含在HashSet中,那么您的理论复杂度会更低,因为每个此类测试仅花费O(1)而不管HashSet的大小,反映了ref的长度。