1

我有一个字符串数组:

qTrees[0] = "023012311312201123123130110332";
qTrees[1] = "023012311130023103123130110332";
qTrees[2] = "023013200020123103123130110333";
qTrees[3] = "023013200202301123123130110333";

使用这个循环,我试图从他们那里检索类似的部分:

String similarPart = "";
    for (int i = 0; i < qTrees[0].length(); i++){
        if (qTrees[0].charAt(i) == qTrees[1].charAt(i) &&
                qTrees[1].charAt(i) == qTrees[2].charAt(i) &&
                qTrees[2].charAt(i) == qTrees[3].charAt(i) ){

            similarPart += qTrees[0].charAt(i);
        } else {
            break;
        }
    }

但这是错误的。如您所见,它将仅返回“02301”,但更深层次的相似性是可能的。

请建议我一个更好的方法来做到这一点。谢谢。

4

2 回答 2

0

你需要更好地定义你想要达到的目标。你想要_____吗:

  • 找到数组中任意两个条目之间最长的公共起始序列;
  • 在数组中的所有条目中找到最长的公共起始序列;
  • 找到任意两个条目之间的最长公共序列(即相同位置的相同字符);
  • 在数组中的所有条目中找到最长的公共序列。

所有这些都会给出稍微不同的方法,但归结为正确使用breakcontinue在你的循环中。

于 2013-03-15T07:57:18.187 回答
0

删除代码中的 else 部分。然后它将检查直到字符串的末尾。

编码 :

    for (int i = 0; i < qTrees[0].length(); i++){
        if (qTrees[0].charAt(i) == qTrees[1].charAt(i) &&
                qTrees[1].charAt(i) == qTrees[2].charAt(i) &&
                qTrees[2].charAt(i) == qTrees[3].charAt(i) ){

            similarPart += qTrees[0].charAt(i);
        }
    }
于 2013-03-15T08:06:31.627 回答