我编写了代码,用于检查S3是否是S1和S2字符串的交错。
但是对于像“AB”,“CD”这样简单的字符串来说它失败了 - > “ACBD”
我错过了什么吗?
class InterleavedString {
// error
public static boolean isInterleaved (String A, String B, String C)
{
// Iterate through all characters of C.
int a = 0, b = 0, c = 0;
while (C != null)
{
// Match first character of C with first character of A,
// If matches them move A to next
if (A.charAt(a) == C.charAt(c))
a++;
// Else Match first character of C with first character of B,
// If matches them move B to next
else if (B.charAt(b) == C.charAt(c))
b++;
// If doesn't match with either A or B, then return false
else
return false;
// Move C to next for next iteration
c++;
}
// If A or B still have some characters, then length of C is smaller
// than sum of lengths of A and B, so return false
if (A != null || B != null)
return false;
return true;
}
public static void main(String [] args) {
String A = "AB", B = "CD", C = "ACBD";
System.out.println(isInterleaved(A, B, C));
}
}
错误:
线程“main”中的异常java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:java.lang.String.charAt中的2(未知 来源)at strings.InterleavedString.isInterleaved(InterleavedString.java:14)at strings.InterleavedString.main(InterleavedString.java:40)
已编辑:
while (c != C.length())
.....
.....
if (a != A.length() || b != B.length())
答案 0 :(得分:3)
while
声明的条件错误。您永远不会更改C
的值。您应该使用while (C != null)
或类似的东西来代替c != C.length()
。
您的A != null
和B != null
语句也存在同样的问题,因为charAt
不会删除任何字符!
此外,您需要检查Strings
条款中if
的范围:
if (a < A.length() && A.charAt(a) == C.charAt(c))
此外,如果您的目标是提高效率,则应在方法开头添加此检查,然后删除最后的if
语句:
if (A.length() + B.length() != C.length())
return false;
答案 1 :(得分:0)
这是错误的。尝试使用“XXY”,“XXZ”,“XXZXXY”..输出将为false
答案 2 :(得分:0)
boolean interleaving(String s1, String s2, String s3){
char a[] = s1.toCharArray();
char b[] = s2.toCharArray();
char c[] = s3.toCharArray();
if(a.length+b.length!=c.length){
return false;
}
int i=0,j=0,k=0;
while(k<=c.length-1){
if(i<a.length && c[k]==a[i]){
i++;
}else if(j<b.length && c[k]==b[j]){
j++;
}else{
return false;
}
k++;
}
return true;
}