【发布时间】:2026-01-17 13:15:01
【问题描述】:
我正在尝试解决以下面试练习题:
k-palindrome 是一个字符串,最多在删除时转换为回文 k 个字符。
给定一个字符串 S 和一个整数 K,如果 S 是一个 k-回文数,则打印“YES”; 否则打印“否”。
约束:
S最多有 20,000 个字符。0 <= k <= 30示例测试用例:
Input - abxa 1 Output - YES Input - abdxa 1 Output - NO
我决定的方法是采用所有可能的长度为 s.length - k 或更大的字符串组合,即 "abc" 和 k = 1 -> "ab" "bc" "ac" "abc" 并检查如果它们是回文。到目前为止,我有以下代码,但似乎无法找出在一般情况下生成所有这些字符串组合的正确方法:
public static void isKPalindrome(String s, int k) {
// Generate all string combinations and call isPalindrome on them,
// printing "YES" at first true
}
private static boolean isPalindrome(String s) {
char[] c = s.toCharArray()
int slow = 0;
int fast = 0;
Stack<Character> stack = new Stack<>();
while (fast < c.length) {
stack.push(c[slow]);
slow += 1;
fast += 2;
}
if (c.length % 2 == 1) {
stack.pop();
}
while (!stack.isEmpty()) {
if (stack.pop() != c[slow++]) {
return false;
}
}
return true;
}
任何人都可以想出一种方法来实现这一点,或者展示一个更好的方法吗?
【问题讨论】:
-
Apache Commons,StringUtils.reverse。应该是:
"abxa".equals(StringUtils.reverse("abxa")) -
你应该在你的问题中真正描述你的问题,而不是让它从你的 cmets 中推断出来,因为标题具有误导性。
标签: java algorithm palindrome