gpt4 book ai didi

java - 返回两个给定字符串之间较大序列的大小

转载 作者:行者123 更新时间:2023-12-01 10:01:04 24 4
gpt4 key购买 nike

嗯,我的问题是:我必须返回两个给定字符串之间较大序列的大小。

我现在的代码:

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
while (true) {
String word1 = br.readLine();
if (word1 == null) {
break;
}
String word2 = br.readLine();
int lengthWord1 = word1.length();
int lengthWord2 = word2.length();
int max = 0;
if (word1.equals(word2) || word2.contains(word1)) {
max = lengthWord1;
} else if (word1.contains(word2)) {
max = lengthWord2;
} else {
int j = 1;
int maxLength = Math.max(lengthWord1, lengthWord2);
int counter = 0;
String largerWord;
String smallestWord;
if (maxLength == lengthWord1) {
largerWord = word1;
smallestWord = word2;
} else {
largerWord = word2;
smallestWord = word1;
}
int minLength = smallestWord.length();
int oldMax = 0;
for (int i = 0; i < maxLength - 1; i++) {
while (maxLength + 1 != j) {
String x = largerWord.substring(i, j++);
int lengthOfReplace = smallestWord
.replace(x, "").length();
if (minLength == lengthOfReplace) {
if (max != 0) {
i = counter;
if (smallestWord.contains(
x.substring(x.length() - 1))) {
i--;
}
}
break;
}
max = Math.max(minLength - lengthOfReplace, oldMax);
counter++;
oldMax = max;
}
}
}
System.out.println(max);
}
}

一些输入及其预期输出:

  • abcdef cdofhij//2(对(“cd”)
  • 二四//1(字母“O”)
  • abracadabra open//0(无)
  • 嘿,这个 java 不错 Java 是一个新范例//7(“ava 是”)

上面的所有输入都与我的代码完美配合,但在某些情况下仍然失败(可能是因为它有重复的字母,我不知道)..

错误输出示例:

  • abXabc abYabc//应该输出 3,但返回 4

所以,我现在陷入困境,非常感谢任何帮助。

最佳答案

您正在寻找Longest common substring problem

这是code在java中

public static int longestSubstring(String str1, String str2)
{
StringBuilder sb = new StringBuilder();
if (str1 == null || str1.isEmpty() || str2 == null || str2.isEmpty())
return 0;

// ignore case
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();

// java initializes them already with 0
int[][] num = new int[str1.length()][str2.length()];
int maxlen = 0;
int lastSubsBegin = 0;

for (int i = 0; i < str1.length(); i++)
{
for (int j = 0; j < str2.length(); j++)
{
if (str1.charAt(i) == str2.charAt(j))
{
if ((i == 0) || (j == 0))
num[i][j] = 1;
else
num[i][j] = 1 + num[i - 1][j - 1];

if (num[i][j] > maxlen)
{
maxlen = num[i][j];
// generate substring from str1 => i
int thisSubsBegin = i - num[i][j] + 1;
if (lastSubsBegin == thisSubsBegin)
{
// if the current LCS is the same as the last time
// this block ran
sb.append(str1.charAt(i));
}
else
{
// this block resets the string builder if a
// different LCS is found
lastSubsBegin = thisSubsBegin;
sb = new StringBuilder();
sb.append(str1.substring(lastSubsBegin, i + 1));
}
}
}
}
}
return sb.toString().length();
}

关于java - 返回两个给定字符串之间较大序列的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com