回文字符串

JAVA算法:回文字符串相关问题详解(回文字符串总结) JAVA算法:回文字符串相关问题详解(回文字符串总结) Q1. 编写一个工具方法判断给定的字符串是否为回文字符串 例如:给定一个字符串“aabbaa”,判断该字符串是否为回文字符串。 算法设计如下: /* * 给定一个字符串,判断该字符串是否为一个回文字符串 * start表示需要判断的起始位置 * end表示需要判断的结束位置 */ public static ... 阅读详情


题目描述:

        回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串。 输入:非空仅由小写字母组成的字符串,长度不超过100; 输出:能组成的所有回文串的个数(因为结果可能非常大,输出对1000000007取余数的结果)。 例如:输入"aabb" 输出为2(因为“aabb”对应的所有回文字符串有2个:abba和baab) 函数头部 c: int palindrome(const char *s); c++ int palindrome(const string &s); java public static int palindrome(String s) ;           

       分析:哎,这题最要命的就是大整数处理问题 ,算小弟能力有限,只能用java完成这道题 ,因为如果用C的话处理大整数确实麻烦,而对于这道题简直是更加的麻烦。我没有更好的方法去完成,所以只能用java大整数,暴力解决,不过要注意时间复杂度的问题,要不然会超时。代码有注释,请信息看。不过在这里想说下这题的思路。其实这是一道地地道道的排列题目,但是并不是边排列边计数,而是通过找递推式子或者找出其中的规律,现在就让我们来找规律吧。

1、s=“aabb”;回文数counts=2!/(1!*1!);  

2、s="aabbcc";回文数counts=3!/(1!*1!*1!);  

3、s="aabbccc";回文数counts=3!/(1!*1!*1!);  

4、s="aabbbbcc";回文数counts=4!/(1!*2!*1!);  

5、s="aabbbcccc";回文数counts=4!/(1!*1!*2!);  

.....

.....

.....

n、s;回文数counts=n/(c1!*c2!*......*c26!);

说明:n为字符串字符串s长度的一半,c1...26为字符串中某个字符个数的一半。它们的一般都是向下取整。

代码实现:

import java.math.BigInteger;
public class Main {
	public static int palindrome(String s)
	{
		int[] counts = new int[26];
		int i, j, k = 1, tk, p = 0, judge = 0, sum = 0, pp = 0, zero = 0, temp = 1;//声明一堆变量,judge判断字符串是否合法、sum为字符串总和、zero判断是否为单一字符,其他不解释了
		char ss[] = s.toCharArray();
		BigInteger allcounts = BigInteger.valueOf(1);
		BigInteger eps = BigInteger.valueOf(0);
		int len = s.length();
		for (i = 0; i < 26; i++) counts[i] = 0;
		for (i = 0; i < len; i++)//计算每种字符个数
		{
			counts[ss[i] - 'a']++;
		}
		for (i = 0; i < 26; i++)//判断字符串合法性
		{
			if (counts[i] % 2 == 1)
			{
				judge++;
			}
			if (counts[i] == 0)
			{
				zero++;
			}//计数折半
			counts[i] /= 2;
			sum += counts[i];
		}
		if (zero == 25)//单一字符
		{
			return 1;
		}
		if (judge >= 2)//字符串不合法
		{
			return 0;
		}
		for (i = 1; i <= sum; i++)//计算阶乘
		{
			temp *= i;
			if (temp >= 20000000 || i == sum)//这部很重要,减低时间复杂度
			{
				allcounts = allcounts.multiply(BigInteger.valueOf(temp));
				temp = 1;
			}
		}
		temp = 1;
		for (i = 0; i<26; i++)//重复字符数阶乘
		{
			for (j = 1; j <= counts[i]; j++)
			{
				temp *= j;
				if (temp >= 20000000 || j == counts[i])//这部很重要,减低时间复杂度
				{
					allcounts = allcounts.divide(BigInteger.valueOf(temp));//除去重复
					temp = 1;
				}
			}
		}

		eps = allcounts.divide(BigInteger.valueOf(1000000007));//计算有多少个10000000007
		allcounts = allcounts.add(eps.multiply(BigInteger.valueOf(-1000000007)));//对1000000007求余
		return allcounts.intValue();
	}


	//start 提示:自动阅卷起始唯一标识,请勿删除或增加。 
	public static void main(String args[])
	{
		System.out.println(palindrome("hqaymehhrsfuqrpahrimsxftuxqrpsejouuehaqtsryxjhearxmogmi"));
	}
	//end //提示:自动阅卷结束唯一标识,请勿删除或增加。

}


字符串中最长的回文字符串长度 1、回文字符串     回文字符串是指aba类型的字符串,即字符串关于中间字符对称。判断字符串中是否含有回文、得到最长回文字符串的长度、得到不同回文字符串的个数等等,是经常考察的编程题目。 2、之前采用的一种比较笨的得到最长回文字符串的方法     思想:双重指针遍历,根据回文字符串的特点,回文开始的字符与结尾处字符相同......那么一个指针i从前向后遍历,一个指针j从后向前遍历,如果出现 阅读详情

相关推荐

给定一个字符串,求这个字符串的最大回文数

题目:回文判断是一类典型的问题,尤其是与字符串结合后呈现出多姿多彩,在实际应用中比较广泛,下面介绍几个回文的问题。 首先我们要介绍一个什么叫回文数:回文,就是指一个字符串顺着读和反着读都是一样的字符串,例如madam,你我你,我爱我   等等一些列的字符串 1、首先来判断一下一个字符串是否是回文字符串: public int palindromeNumber(String s, int l

Jeff Li 3874

英语中的单词词性

英语单词词性 简写语的意义: ,n. 名词 ,noun的缩写 v. 动词 , verb的缩写 pron. 代词 , pronoun的缩写 adj. 形容词, adjective的缩写 adv. 副词, adverb的缩写 num.数词 , numeral的缩写 art. 冠词, article的缩写 prep. 介词 ,前置词,preposition的缩写 conj. 连词 , conjunct

小欣儿的专栏 2215

ST7789P3初始化配置

【代码】ST7789P3初始化配置。

zqq_1314的博客 4155

C/C++ | 30-27 给定字符串A和B,输出A和B中的最大公共子串

给定字符串A和B,输出A和B中的最大公共子串。 比如A="aocdfe" B="pmcdfa" 则输出"cdf" #include #include #include using namespace std; char *strcmp(char *s1,char *s2,char *dest) { char*scmp2=s2; int count = 0, t

qq_38362761的博客 2530

ASTRA Toolbox学习笔记-Python

ASTRA Toolbox 是一个用于处理 X 射线相干散射和 X 射线传输成像的开源算法工具箱。本文档概述了该工具箱的基本概念。

hou9021的博客 8261

Agent + 监控平台:自动诊断告警根因

根因分析、智能监控、AI Agent、告警风暴、异常检测、可观测性、故障诊断在现代分布式系统中,快速定位和解决问题是维持系统稳定性的关键。传统的监控系统虽然能够生成大量告警,但往往缺乏对告警根因的自动诊断能力,导致运维团队在告警风暴中难以快速定位问题。本文深入探讨了将AI Agent技术与监控平台结合,实现告警根因自动诊断的技术架构、理论基础和实现方法。我们将从第一性原理出发,分析根因诊断问题的本质,介绍基于Agent的智能监控系统设计,并通过实际案例展示其应用价值。文章同时涵盖了从理论到实践的全链路,包括

AIGC应用创新大全的博客 305

求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1。

用递归算法写一个函数,求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1。这个是原题目的要求,本人现在水平不高,所采用了非递归的形式。递归的会在有想法后给出。下面贴上代码,共大家参考: #include #include int get_max_char_count(char *s,char *ret) { assert(s!=NULL); c

zzran的专栏 3192

自动配胶机的PLC控制系统设计

我们根据自动配胶机的控制需求,编写了相应的PLC程序。PID温度控制算法的实现方面,我们采用了经典的PID控制算法,通过不断调整加热器的功率,实现对胶水混合温度的精确控制。在PLC程序中,我们编写了PID控制算法的程序模块,通过实时采集温度传感器的数据,计算温度偏差和偏差变化率,并根据PID控制算法计算出加热器的功率输出值,实现对温度的精确控制。在系统调试阶段,我们对自动配胶机的各个部分进行了详细的测试和调试,包括气路和液路的开关测试、传感器的精度测试、步进电机的位置和速度测试以及PLC程序的逻辑测试等。

lagougongzuoshi的博客 1228

回文--nkoj3681

P3681  回文 时间限制 : - MS   空间限制 : 65536 KB 评测说明 : 时限1000ms 问题描述    给你一个由N个小写字母构成的字符串,请你将它改成“回文串”。你可以任意调整串中字符的位置,但不可以删掉其中的字符。问,最多能得到多少个不同的回文串?          结果可能很大,mod  1,000,000,007 后再输出!

INCINCIBLE的博客 639

手把手教你用TBtools+MCScanX完成玉米基因家族共线性分析(附完整代码)

本文提供了一套完整的玉米基因家族共线性分析实战流程,详细讲解了如何从数据准备、格式处理开始,利用DIAMOND进行快速比对,再结合MCScanX进行核心共线性区块鉴定,最后通过TBtools实现从全基因组圈图到特定基因家族微共线性图的可视化。教程包含可直接运行的代码与常见问题解决方案,帮助研究者高效完成从命令行计算到图形化展示的全过程。

tech5的博客 591

嵌入式硬件实战:RC、LC与RL滤波电路的设计与选型指南

本文深入探讨了嵌入式系统中RC、LC与RL滤波电路的设计与选型策略。通过生活化比喻和实战案例,详细解析了三种滤波电路的工作原理、应用场景及工程注意事项,帮助工程师根据电流大小、频率特征和成本预算选择最优方案,提升嵌入式硬件设计的稳定性和抗干扰能力。

kiwi8的博客 284

回文字符串判断以及最长回文字符串长度判断

回文字符串,就是正着反着读都一样的字符串。 1、回文字符串判断 假如这个字符串为奇数长度的回文字符串,则除了最中间的字符外,其左右的字符串两两相同。 假如这个字符串为偶数长度的回文字符串,则其左右完全对称。 代码如下: #include<iostream> #include<string> using namespace std; bool palindrome(strin...

vanvanvane的博客 1825

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战

本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。

weixin_29193359的博客 441

回文数及回文字符串的判断

一、回文数 1.非递归算法 (1)解题思路 把目标数n赋给另一个变量s1,然后将s1的高位逐个变为低位(也就相当于把数s1打个颠倒),再判断调整完顺序之后的(s1调到之后为s2)s2值与最初的n的值进行比较,看是否相等,相等的话即为回文数,反之则不是回文数。 (2)源程序 #include <stdio.h> #include <stdlib.h> void main(...

yo_u_niverse的博客 1357

使用AI预测彩票的架构思路

彩票是随机的数字游戏,不要过度依赖AI,本文仅供娱乐研究

淘淘小窝 9413

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

回文数c语言 字符串,回文数与回文字符串的判断

1.回文数字:判断一个数字是不是回文数。(回文数的特点是正反序是同一个数字,如:12321,3443)。2.回文字符串:判断一个字符串是不是回文字符串。(回文字符串特点是原字符串与字符串逆序之后一样,如:"abcba","cddc")。#includeusingnamespacestd;intPalindromeNumber(size_tcount){//1.在自然数范围内//2.情况:0...

weixin_42537450的博客 1088

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【C语言】回文数和回文字符串的判断

一、名词解释: 如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666 同理如果一个字符串正着反着都是一样就称为这个字符串是回文字符串,例如“aba”,"aabb" 二、解题思路 回文数解题思路一:可以将整数逐位存到数组中,在依次把第一个和最后一个比较,直到中间位为止 这个思路同回文字符串的思路相同。 回文数解题思路二:将该整数逆置后的整数和逆置前比较...

Jacky_Feng的博客 4194

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

字符串回文和数字回文

转载自http://blog.youkuaiyun.com/h971379154/article/details/48161751 1.字符串回文判断   所谓字符串回文就是逆序后与原来字符串相同,如“abccba”就是回文字符串。   使用递归求解,递归结束情景:  字符串长度可能会奇数或偶数:              (1)如果字符串长度是奇数,字符串会剩下

Abner 603

字符串的回文总结

一看到回文字符串,脑海里立马要想到前面两个最常用的结题思路: 1.动态规划 2.中心扩散法 3.还有著名的马拉车算法 leetcode出现的回文字符串的三个题: 1.回文子串的个数 2.最长回文子串 3.最长不连续的回文子串 1. public class Solution14_回文子串 { /** * 方法一:中心扩散法 */ static...

weixin_39338645的博客 376

回文数与回文字符串问题

华为2013校园招聘的上机试题,记得有两道,好忧伤的是当时被第一道试题卡壳了,印象尤深,就是回文数问题,时间过去一年多了,记得题目:给出一个字符串,判断是否是回文字符串? 刚开始的思路是将字符串转为数组n(字符串长度),再根据arr[i]!=arr[n-i-1]。反正是没做出来,可能是第一次参加招聘和上机做题(其实真正原因是基础很薄弱)       最近又碰到这样的题目,以此小记逝去的光

从改变自己开始 800

回文数与回文字符串的判断方法

判断一个数是否为回文数,就是要判断当这个数反向排序时所得的自然数是否与原数相等,若相等则为回文数。 例题如下: 链接:https://ac.nowcoder.com/acm/problem/22169 来源:牛客网 题目描述 今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。 输入描述: 输入一个整数n(1 <= n <= 100000) 输出描述: 从1开始按从小到大的顺序输出所有回文

qcy的博客 1325
上一篇: 解析Bellman-Ford算法求最短路径
下一篇: 高校俱乐部之友好数(1)
wingahi
博客等级 码龄15年 15粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值