秘密密码,有人可以解决这个问题吗

Secret cipher code,can someone resolve the issue please

Geek 想要以字符串 S 的形式向他的朋友 Keeg 发送一条加密消息以及如何破译该消息的说明。为了破译消息,他的朋友需要从左到右遍历消息字符串,如果他找到 *,他必须将其删除并将到目前为止读取的所有字母添加到字符串中。他必须继续这样做,直到他摆脱所有 *。 你能帮Geek加密他的消息字符串S吗?

注意:如果字符串可以通过多种方式加密,则找到最小的加密字符串。

示例 1:

Input: S = "ababcababcd"
Output: ab*c*d

说明:我们可以加密字符串 按照以下方式:"ababcababcd" -> "ababc*d" -> "ab*c*d"

示例 2:

Input: S = "zzzzzzz"
Output: z*z*z

说明:字符串可以加密 有两种方式:"z*z*z""z**zzz"。在......之外 两个"z*z*z"的长度比较小

预期时间复杂度:O(N)
预期辅助Space:O(N)

限制条件:1 ≤ |S| ≤ 105

答案:

public String compress(String s) {

    if(s.length()==1) return s;
        
    if(s.length()%2==0){
            if(s.substring(0,s.length()/2).equals(s.substring(s.length()/2,s.length()))) {
               return s.substring(0,s.length()/2)+"*";
            }
        }
        String left=compress(s.substring(0,s.length()-1))+s.charAt(s.length()-1);
        
        return left;
    }

我没有从这段代码中得到正确的解决方案,但在某些情况下,它在 main 方法中显示了这个 java.lang.OutOfMemoryError

请确保字符串 s 的最大长度可能是 10^5 而不是 105(我在 GFG 提到了这个问题)。由于string的长度太大,如果使用上面的方法,那么在某些情况下,JVM可能无法为该方法的递归调用分配内存。

因此它照常显示 outofmemory 错误。