说我们有一个包含这些字符的字符串 “ABGCCFFGTBG”
然后我们有另一个字符串“GECCCDOABG”
因此模式是前缀和后缀,但是如果你的给定字符串大于此但具有公共前缀和后缀模式,那么如何将它们拉出到java中的子字符串中。请记住,我们并不总是知道字符串中的字符让我们知道其中有一个模式。
我的开始是这样的
for(int i = 0. i < strA.length(); i++)
{
for(int j = 0; j < strB.length(); j++)
{
if(strA.charAt(i) == strB.charAt(j))
{
String subPattern = strA.substring(0,i);
String subPattern2 = strB.substring(0,j);
}
}
}
但这不起作用。有什么想法吗?
答案 0 :(得分:1)
首先尝试选择最匹配的模式:
public static void main(String[] args) {
String strA = "ABGCCFFGTBG";
String strB = "GECCCDOABG";
System.out.println("Pattern: " + findPattern(strA, strB));
}
public static String findPattern(String strA, String strB) {
for (int length = Math.min(strA.length(), strB.length()); length > 0; length--) {
for (int i = 0; i <= strA.length() - length; i++) {
String pattern = strA.substring(i, i + length);
if (strB.contains(pattern)) {
return pattern;
}
}
}
throw new NoSuchElementException("No common pattern between " + strA + " and " + strB);
}
输出:
Pattern: ABG
答案 1 :(得分:0)
这个解决方案会找到一个模式,无论它在字符串中的哪个位置:
public static void main(String[] args) {
String strA = "uioABCDqwert";
String strB = "yxcvABCDwrk";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strA.length(); i++) {
for (int j = 0; j < strB.length(); j++) {
if (strA.charAt(i) == strB.charAt(j)) {
sb.append(strB.charAt(j));
i++;
}
}
if (sb.length() > 0)
break;
}
System.out.println(sb.toString());
}
这可以让你知道如何做到这一点