检查字符串是否是回文的变位词
Check if string is anagram of palindrome
我的问题是:
你如何检查给定的字符串是否是回文的变位词?
我在互联网上的 Python 中找到了一些解决方案,但我不确定如何检查它。我正在考虑将 strig 转换为 char []
,然后获取每个字符的 HashCode,但我被卡住了。
如果您对回文或变位词是一个真实的词不感兴趣,那么我认为您可以将问题重新定义为 检查给定字符串是否不超过一个出现奇数的字符次。这是基于只有中间字符可能出现奇数次。只要满足就可以将字符串组成回文
为此,您可以使用 Linq。可能是这样的:
private static bool IsPalindromeAnagram(string test)
{
var charCount = test.GroupBy(c => c, (c, i) => new
{
character = c,
count = i.Count()
});
return charCount.Count(c => c.count % 2 == 1) <= 1;
}
在字典中保存字符作为键,然后检查是否有多个键为奇数。这种方式也有所有独特的字符准备好制作字谜。
var length = s.Length;
if (length == 0) return false;
var dic = new Dictionary<char, int>();
for (var i = 0; i < length; i++)
{
if (dic.ContainsKey(s[i]))
{
dic[s[i]]++;
continue;
}
dic.Add(s[i], 1);
}
int odd = 0;
foreach (var pv in dic)
{
if (odd > 1) return false;
if (pv.Value % 2 == 0)
{
continue;
}
odd++;
}
我的问题是: 你如何检查给定的字符串是否是回文的变位词?
我在互联网上的 Python 中找到了一些解决方案,但我不确定如何检查它。我正在考虑将 strig 转换为 char []
,然后获取每个字符的 HashCode,但我被卡住了。
如果您对回文或变位词是一个真实的词不感兴趣,那么我认为您可以将问题重新定义为 检查给定字符串是否不超过一个出现奇数的字符次。这是基于只有中间字符可能出现奇数次。只要满足就可以将字符串组成回文
为此,您可以使用 Linq。可能是这样的:
private static bool IsPalindromeAnagram(string test)
{
var charCount = test.GroupBy(c => c, (c, i) => new
{
character = c,
count = i.Count()
});
return charCount.Count(c => c.count % 2 == 1) <= 1;
}
在字典中保存字符作为键,然后检查是否有多个键为奇数。这种方式也有所有独特的字符准备好制作字谜。
var length = s.Length;
if (length == 0) return false;
var dic = new Dictionary<char, int>();
for (var i = 0; i < length; i++)
{
if (dic.ContainsKey(s[i]))
{
dic[s[i]]++;
continue;
}
dic.Add(s[i], 1);
}
int odd = 0;
foreach (var pv in dic)
{
if (odd > 1) return false;
if (pv.Value % 2 == 0)
{
continue;
}
odd++;
}