gpt4 book ai didi

java - 查找具有唯一 K 个字符的最长子字符串的代码不适用于所有输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:18:53 26 4
gpt4 key购买 nike

给定一个字符串 ""aabbcdeeeeggi"和 k=3,代码应该找到最长的子字符串,最多有 k 个不同的字符。对于上面的输入,它应该是 "deeeeggi"。

Here是 Python 中问题的优雅 O(n) 解决方案。我正在用 Java 实现。但我没有得到所有输入的所需输出。

public class SubStringWithKUniqueCharacters {

public static void main(String[] args){

System.out.println(longestSubStringWithUniqueK("aabbcdeeeeggi", 3));
System.out.println(longestSubStringWithUniqueK("aabbcdeeeeggi", 2));
}

public static String longestSubStringWithUniqueK(String input, int k){
int len = input.length();
Set<Character> unique = new HashSet<>();

int i = 0;
int j = 0;
int count = 0;
int maxStartIndex = 0;
int maxEndIndex = 0;
int maxLen = 0;
char[] inputArr = input.toCharArray();

while (i<len){

if (count==k && j -i > maxLen){
maxStartIndex = i;
maxEndIndex = j;
maxLen = maxEndIndex - maxStartIndex;
}
if (count<k && j<len){
if (unique.add(inputArr[j])){
count++;
}
j++;
}
else {
if (unique.remove(inputArr[i])){
count--;
}
i++;
}
}
return input.substring(maxStartIndex,maxEndIndex);
}
}

这是输出:

eeeeggi //correct output
eeeggi //incorrect output

我无法捕捉到错误所在。任何帮助将非常感激。谢谢

最佳答案

您的实现没有按预期方式工作,是因为原始的 python 解决方案存在错误。我对你的代码做了一些修改。希望现在一切都好:

public class SubStringWithKUniqueCharacters {

public static void main(String[] args){

System.out.println(longestSubStringWithUniqueK("aabbcdeeeeggi", 3));
System.out.println(longestSubStringWithUniqueK("aabbcdeeeeggi", 2));
}

public static String longestSubStringWithUniqueK(String input, int k){
int len = input.length();
Set<Character> unique = new HashSet<>();

int i = 0;
int j = 0;
int count = 0;
int maxStartIndex = 0;
int maxEndIndex = 0;
int maxLen = 0;
char[] inputArr = input.toCharArray();

while (i<len){

if (count==k && j -i > maxLen){
maxStartIndex = i;
maxEndIndex = j;
maxLen = maxEndIndex - maxStartIndex;
}
// 1. if we reach the end of the string, we're done.
if (j + 1 > len){
break;
}
// 2. changed to count <= k here
else if (count<= k && j<len){
if (unique.add(inputArr[j])){
count++;
}
j++;
}
else {
if (unique.remove(inputArr[i])){
// 3. remove all consecutive chars of the same value
char c = inputArr[i]; // save as temp char
while (inputArr[i] == c)
{
i++;
}
count--;
}
}
}
return input.substring(maxStartIndex,maxEndIndex);
}
}

现在的输出是:

deeeegg
eeeegg

关于java - 查找具有唯一 K 个字符的最长子字符串的代码不适用于所有输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751753/

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