【问题标题】:Check if string is anagram of palindrome检查字符串是否是回文的字谜
【发布时间】:2015-05-30 20:46:40
【问题描述】:

我的问题是: 如何检查给定的字符串是否是回文的字谜?

我在互联网上找到了一些 Python 解决方案,但我不确定如何检查。我正在考虑将字符串转换为char [],然后获取每个字符的 HashCode,但我被卡住了。

【问题讨论】:

  • 你能举一些例子来说明你的意思吗?例如,“abcabc”是否有效,因为它是“abccba”的字谜,即使它们都不是真正的单词?
  • 即“naa”是“ana”回文的字谜
  • 为什么需要获取每个字符的 HashCode 而不是使用字符本身?
  • 对,所以它们是否真的是单词并不重要?这听起来像是检查只是“最多一个字母出现奇数次”。

标签: c# palindrome anagram


【解决方案1】:

如果您对回文或字谜是一个真实的单词不感兴趣,那么我认为您可以将问题重新定义为 检查给定的字符串是否不超过一个出现奇数次的字符时间>。这是基于只有中间字符可能出现奇数次。只要满足,就可以从字符串中形成回文。

为此,您可以使用 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;
}

【讨论】:

    【解决方案2】:

    将字典中的字符保存为键,然后检查是否有多个键是奇数。这种方式也有所有独特的字符准备制作字谜。

     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++;
            }
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2016-04-07
      • 2021-01-11
      • 2019-05-02
      • 1970-01-01
      • 2013-08-18
      • 2011-12-12
      相关资源
      最近更新 更多