gpt4 book ai didi

java - 需要用 * 编码 String 中的重复模式,这样 * 意味着 "repeat from beginning"

转载 作者:行者123 更新时间:2023-12-01 19:43:42 28 4
gpt4 key购买 nike

编码格式:引入*表示“从头开始重复”。例子。输入-{a,b,a,b,c,a,b,a,b,c,d}可以写成{a,b,*,c,*,d}。输出:5;例如2:ABCABCE,输出- 5。

这里*表示从头开始重复。例如,如果给定的字符串是 ABCABCABCABC ,它将返回 ABC** ,另一个例子是如果字符串是 ABCABCABC ,它将返回 ABC*ABC 。

我有以下代码,但此代码假设字符串仅包含重复模式而没有其他字符,我想修改它以检查:1. 哪种模式是重复的2. 忽略不重复的模式2.根据问题陈述对该模式进行编码

import java.util.Scanner;

public class Magicpotion {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the string:");
String str = sc.nextLine();
int len = str.length();
if (len != 0) {
int lenby3 = len / 3;
int starcount = ( int).(Math.log(lenby3) / Math.log(2));
int leftstring = (lenby3 - (int) Math.pow(2, starcount));
int resultlen = (1 * 3) + starcount + (leftstring * 3);
System.out.println("ResultLength: " + resultlen);
System.out.print("ABC");
for (int i = 0; i < starcount; i++) {
System.out.print("*");
}
for (int i = 0; i < leftstring; i++) {
System.out.print("ABC");
}
} else
System.out.println("ResultLength: " + 0);
}
}

这里我的假设是 ABC 将始终是重复模式,因此我将长度除以 3。我想对其进行概括,以便找到可以是 AB 或 BC 或 ABCD 的重复模式,并相应地进行。

最佳答案

这看起来像是家庭作业。因此,只有一些提示而不是完整的解决方案:

您可以逐个字符地处理输入字符串并进行编码。如果您在某个时刻已经读取了 k 个字符,并且接下来的 k 个字符完全相同,则输出 * 并前进到位置 2k。否则,输出下一个输入字符并将位置前进到k+1

正如 dyukha 所提到的,该算法并不总是产生最短的编码。如果需要的话,就必须在搜索上付出更多的努力。

关于java - 需要用 * 编码 String 中的重复模式,这样 * 意味着 "repeat from beginning",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54386321/

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