检查字符串是不是是回文的字谜

Posted

技术标签:

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于检查字符串是不是是回文的字谜的主要内容,如果未能解决你的问题,请参考以下文章

如何检查两个字符串是不是是字谜?

使用 C++ 检查两个字符串是不是是字谜

使用基本Java检查两个字符串是不是是彼此的字谜[重复]

为了检查两个字符串是不是是字谜, hashfunction() 的逻辑应该是啥?

检查两个字符串是不是是字谜的运行时间应该是多少

这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜