给定一个长度为 n 的由小写字母构成的字符串 t 以及一个整数 k 。 请你构造一个字符串 s ,要求: 字符串 s 恰好有 k 个子串等于字符串 t 。 字符串 s 的长度尽可能短,请用Java语言编写程序代码
时间: 2024-05-10 10:18:18 浏览: 189
思路:
首先,我们需要确定 s 的长度。由于 s 中包含 k 个 t 子串,因此 s 的长度应该为 k 个 t 子串的长度之和。
然后,我们可以考虑如何构造 s。我们可以将 t 重复若干次,拼接成一个长度为 k × |t| 的字符串 s'。然后,我们从 s' 中截取长度为 |t| 的子串,如果该子串等于 t,则将其替换为一个特殊字符,比如 #。
最后,我们得到的字符串 s 就是将特殊字符替换回 t 后得到的字符串。
代码实现如下:
```
public class ShortestString {
public static String shortestString(String t, int k) {
int n = t.length();
int len = k * n;
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < k; i++) {
sb.append(t);
}
String s = sb.toString();
sb.setLength(0);
for (int i = 0; i < len; i += n) {
String sub = s.substring(i, i + n);
if (sub.equals(t)) {
sb.append('#');
} else {
sb.append(sub);
}
}
return sb.toString().replace("#", t);
}
public static void main(String[] args) {
String t = "abc";
int k = 3;
String s = shortestString(t, k);
System.out.println(s); // abcabcabc
System.out.println(s.length()); // 9
}
}
```
阅读全文