题目描述:

回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串。

输入:非空仅由小写字母组成的字符串,长度不超过100;
输出:能组成的所有回文串(因为结果可能非常大,输出对1000000007取余数的结果)。

例如:输入"aabb" 输出为2,输出对应的所有回文字符串:abba和baab

函数头部 c: int palindrome(const char *s); c++ int palindrome(const string &s);

挑战规则:
main函数可不用完成

对比数据:
864920675:aaaabbbbcccceeeeddddddffffgggghhhhjjjjiiiikkkkkkkkkkkkkkkkllllll
2:aabb
2520:fdfdfdfdeeeeerrrr
7560:fdfdfdfdqqqqqqwwwww
0:aaabbb

题目分析:

1、内部包含的每个字符的个数为奇数的数量,不能超过1个

2、每个字符在挑选位置时,可以理解成一个组合C(n, j)

3、取余公式:

(a + b) mod m = ((a mod m) + (b mod m)) mod m
(a*b) mod m = ((a mod m) * (b mod m)) mod m

例如:fdfdfdfdqqqqqqwwwww

{f,d,q,w}对应的个数{4,4, 6, 5},那么放在中间位置应该是‘w’。那么当前的字符串为“#########w#########”,我只考虑半个字符串“#########”。则{f,d,q,w}对应的数目为{2, 2, 3, 2},所以用统计学的方法不难发现其值为C(9,2)*C(7,2)*C(5,3)*C(2,2)

#include <iostream>
#include <string>using namespace std;int palindrome(const string &s);
int main()
{string str = "aaaabbbbbbcccceeeeddddddffffgggghhhhjjjjiiiikkkkkkkkkkkkkkkkllllll";cout << palindrome(str) << endl;getchar();return 0;
}// 统计学中组合的求发:C(iMax, index)
int GetCombination(int imax, int index)
{int result = 1;int iDivider = 1;for (int i = 1; i <= index; i ++){result = result * imax;if (i <= index){iDivider = iDivider*i;}imax --;}return result / iDivider;
}int palindrome(const string &s)
{unsigned long long palindromeTotal = 1;const unsigned int modulus = 1000000007;int recordArr[26] = {0};int ia = (int)'a';// 获取每个字符的个数表for (int i = 0; i < s.size(); i ++){int index = (int)s[i] - ia;recordArr[index] ++;}int iOddTotals = 0;int iMaxIndexTotal = 0;for (int i = 0; i < 26; i ++){if (recordArr[i] != 0){if (recordArr[i] % 2 != 0){iOddTotals ++;recordArr[i] --;}recordArr[i] = recordArr[i] / 2;iMaxIndexTotal += recordArr[i]; }}if (iOddTotals > 1){return 0;}unsigned int res = 0;for (int i = 0; i < 26; i ++){if (recordArr[i] != 0){// 计算余数的算法,这样可以数据防止越界//原理://(a + b) mod m = ((a mod m) + (b mod m)) mod m//(a*b) mod m = ((a mod m) * (b mod m)) mod mpalindromeTotal = palindromeTotal * GetCombination(iMaxIndexTotal, recordArr[i]);palindromeTotal %= modulus;iMaxIndexTotal -= recordArr[i];}}return (int)palindromeTotal;
}

挑战编程:回文字符串相关推荐

  1. c语言编程判断输入的一个字符串是否是“回文”。所谓“回文”字符串就是左读和右读都一样的字符串。例如: “abcba“就是一个回文字符串。

    编程判断输入的一个字符串是否是"回文".所谓"回文"字符串就是左读和右读都一样的字符串.例如: "abcba"就是一个回文字符串. 要求:先 ...

  2. 联想回文字符串的编程题

    1. 判断是否是回文序列,输入是整数或者字符串 import stringdef isPalindrome_str(s: str) -> bool:"""判断是否视 ...

  3. Python编程练习:回文字符串

    任务 给定一个字符串,输出所有长度至少为2的回文子串. 回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串. 输入 一个字符串,由字母或数字组成 ...

  4. [PTA C语言]判断回文字符串——编程题

    判断回文字符串 输入一个字符串,判断该字符串是否为回文.回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的. 输入格式: 输入在一行中给出一个不超过80个字符长度的.以回车结束的非空字符串. ...

  5. 统计任意字符串中回文字符串的个数

    题目来源: 庞果英雄会 题目详情: 回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串. 输入:非空仅由小写字母组成的字 ...

  6. 判断字符串是否为回文字符串_字符串文字

    判断字符串是否为回文字符串 String objects hold ordered sequences of bytes, typically characters, usually to form ...

  7. C语言判断回文字符串

    C语言判断回文字符串 #include<stdio.h> char *huiwen(char *str){int i, j,t=0;for(i = 0,j = strlen(str) - ...

  8. NYOJ 回文字符串

    回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然, ...

  9. java判断回文字符串几种简单的实现

    11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进 ...

最新文章

  1. Spring中使用Log4j记录日志
  2. VMware虚拟机安装WIN7
  3. 算法提高课-图论-有向图的强连通分量-AcWing 1174. 受欢迎的牛:tarjan算法求强连通分量、tarjan算法板子、强连通图
  4. 数据结构与算法JavaScript (一) 栈
  5. 一次完整的Loadrunner基本流程操作
  6. c语言除法效率问题,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  7. LeetCode 460. LFU缓存(哈希双链表)
  8. 解混淆/脱壳工具 - De4dot
  9. 斯皮尔曼相关(Spearman correlation)系数概述及其计算例
  10. List集合排序及去重
  11. Python绘制云图
  12. win10安装VMware PowerCLI
  13. ModbusTCP协议,上位机通讯测试实例分享
  14. 基础篇:6.9)形位公差-检测方法Measurement
  15. html body与页面的距离,html - 如何在TBODY元素之间放置间距
  16. 【python教程入门学习】拒绝反爬虫!教你搞定爬虫验证码
  17. 【Java Web基础】(五)实现新增下拉列表—由用户输入内容(Html+JS)
  18. deepin 下 WPS for linux字体显示问题[已解决]
  19. MATLAB基础应用精讲-【基础知识篇】MATLAB中的标点符号
  20. mvn compile报错“程序包com.XXX不存在”

热门文章

  1. 【笔记】使用Twitter API V2进行数据爬取的经验总结
  2. 腾讯云上的个人网站建立
  3. Matlab中使用符号工具箱求解变上限函数积分及其向量化运算
  4. Elo rating system(测试版)
  5. 生态赋能促进产业升级 CDEC中国数字智能生态大会聚焦生态变革
  6. Java 并发编程解析 , 如何正确理解Java领域中的内存模型
  7. Realplay和mplayer的安装!
  8. 《考试脑科学》读书笔记
  9. selenium三种等待时间之隐式等待
  10. 科学中的直觉和反直觉