【发布时间】:2018-10-15 15:08:29
【问题描述】:
这是我在比较二进制字符串时所做的,但在最坏的情况下需要 o(n) 时间。我已经尝试过手动和字符串 compareTo 方法,请帮助我用更好的方法来解决这个问题--
通过 CompareTo 方法 -
if (A.compareTo(temp) < 0)
{
System.out.println("YES");
}
else
{
System.out.println("NO");
}
通过迭代字符串:-
for (int k = 0; k < N; k++){
if (A.charAt(k) == '1' && B.charAt(k) == '0') {
System.out.println("NO");
break;
} else if (B.charAt(k) == '1' && A.charAt(k) == '0') {
System.out.println("YES");
break;
}
看到这是完整的--
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int Q = sc.nextInt();
String A = sc.next();
StringBuilder B = new StringBuilder(sc.next());
for (long i = 0; i < Q; i++) {
int pos = sc.nextInt();
B.setCharAt(pos - 1, '1');
String temp = B.toString();
if (A.equals(temp)) {
System.out.println("YES");
} else {
for (int k = 0; k < N; k++){
if (A.charAt(k) == '1' && B.charAt(k) == '0') {
System.out.println("NO");
break;
} else if (B.charAt(k) == '1' && A.charAt(k) == '0') {
System.out.println("YES");
break;
}
} /*
* else if (A.compareTo(temp) < 0) { System.out.println("YES");
* } else { System.out.println("NO"); }
*/
}
}
【问题讨论】:
-
你所说的“更好的方法”是什么意思?
-
在最坏的情况下,最后一位会有所不同(或者不是,即字符串相等)你怎么知道在结束之前?那就是我怀疑是否存在比 O(n) 更好的东西。或者反问谁或什么让你认为有更好的解决方案?参考?
-
O(n) 是您在没有并行性的情况下可以做到的最好的。
-
如果我必须做并行,我该如何实现它?
-
好的,那么请编辑您的答案并在其中说明这一点。不要忘记为这些测试用例提供数据。
标签: java string binary binary-data