gpt4 book ai didi

java - 排列单词形成回文

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:46 24 4
gpt4 key购买 nike

你好,我一直在尝试从这个输入中形成回文:

String[] text ={"ivcci", "oyotta", "cecarar","bbb","babbbb"};
getPalindrome(text);

我需要重新排列数组中的所有单词以产生此输出

civic
-1
rececar
bbb
bbabb

该方法期望接收一个字符串数组,如

public static String getPalindrome(String[] text){}

“返回 -1 表示数组中的 i.g “oyotta” 无法形成回文

我一直在测试这段代码,它可以工作,但是“cecarar”没有生成“racecar”,因为我在 java 中有点新,我使用了一个字符串而不是一个字符串数组,任何人都可以帮助正确编写这段代码好吗?

非常感谢!

public static String getPalindrome(String s) {

if (s == null)
return null;
Map<Character, Integer> letters = new HashMap<Character, Integer>();

for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!letters.containsKey(c))
letters.put(c, 1);
else
letters.put(c, letters.get(c) + 1);
}

char[] result = new char[s.length()];
int i = 0, j = result.length - 1;
Character middle = null;
for (Entry<Character, Integer> e : letters.entrySet()) {
int val = e.getValue();
char c = e.getKey();

if (val % 2 != 0) {
if (middle == null && s.length() % 2 != 0) {
middle = c;
val--;
} else
return "-1";
}
for (int k = 0; k < val / 2; k++) {
result[i++] = c;
result[j--] = c;
}
}
if (middle != null)
result[result.length / 2] = middle;
return new String(result);
}

最佳答案

为了使一组字符能够产生回文,只有一个字母可以重复奇数次,因此您可以先将其剔除。

无需为您编写实际代码,以下是我将使用的算法:

创建字符到计数器的映射。可以做 int[] counts = new int[26];遍历输入字符串中的每个字符,并增加计数:++counts[Character.toLower(c)-'a'];然后遍历每个字符,看看它的奇数 if (counts[i] & 1 != 0) { if (oddIndex != -1) { return -1; } 奇指数=我; } 如果有两个或多个奇数,这将返回 -1。然后,您可以创建一个 StringBuilder,并从中间的 oddIndex 开始(如果它存在)。然后检查计数,并将 count[i]/2 添加到字符串构建器的前面和后面。

这将为您提供来自原始输入的对称字符串。

现在,如果您确实需要单词,那么您必须有一本回文字典。您实际上可以对所有回文进行预处理以获得“已排序字符串”=>“回文”的映射

class PalindromeChecker
{
final Map<String, String> palindromes = new HashMap<String, String>();

public PalindromeChecker(Iterable<String> allPalindromes) {
for (String palindrome: allPalindromes) {
char[] chars = palindrome.getChars();
Arrays.sort(chars);
palindromes.put(String.valueOf(chars), palindromes);
}
}

public String getPalindrome(String input) {
char[] chars = input.getChars();
Arrays.sort(chars);

return palindromes.get(String.valueOf(chars));
}
}

关于java - 排列单词形成回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27626446/

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