小算法:递归实现回文判断

static void Main(string[] args)
        {
            DateTime dt1 = DateTime.Now;

            string text = "abcdedcba";
            bool bYes = Recv(text);
            Console.Write("{0}:{1}回文!", text, bYes ? "是" : "不是");

            DateTime dt2 = DateTime.Now;
            Console.Write("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds.ToString());
            Console.ReadLine();
        }

        private static bool Recv(string text)
        {
            string head = text.Substring(0, 1);
            string end = text.Substring(text.Length - 1, 1);
            if (head == end)
            {
                if (text.Length == 1)
                    return true;
                string t = text.Substring(1, text.Length - 2);
                return Recv(t);
            }
            return false;
        }

  

时间: 2024-08-27 20:00:40

小算法:递归实现回文判断的相关文章

Manacher算法----最长回文子串

题目描述 给定一个字符串,求它的最长回文子串的长度. 分析与解法 最容易想到的办法是枚举所有的子串,分别判断其是否为回文.这个思路初看起来是正确的,但却做了很多无用功,如果一个长的子串包含另一个短一些的子串,那么对子串的回文判断其实是不需要的.同时,奇数和偶数长度还要分别考虑. Manacher算法可以解决上述问题,并在O(n)时间复杂度内求出结果.下面我们来看一下Manacher算法. 首先,为了处理奇偶的问题,在每个字符的两边都插入一个特殊的符号,这样所有的奇数或偶数长度都转换为奇数长度.比

JAVA用递归来判断回文串

用递归来判断回文串 思路: ①首先如果是空串,一个字符,则判断是回文串 ②若不满足①,则我们需要对字符串进行递归判断,我们会想到要用第一个字符和最后一个字符进行比较,若相同则,第二个和倒数第二个进行比较,如此循环往复,就会出现一个终点 ③终点处会出现两种情况,第一种情况:两个不同位置的字符进行比较,第二种情况是:两个相同位置的字符进行比较.因此我们需要找出这个中间值,我们通过分奇偶的方式,算出最终左边要比较的数的下标,若为奇数,左边的下标为:len/2;若为偶数,左边的下标为:len/2: ④递

DS之顺序栈和链队实现回文判断

顺序栈和链队的基本操作就不再一一列举了,要想实现回文判断,先来了解什么是回文?"回文"一字符串正着读和反着读是相同的字符序列,如"abcba","abba"为"回文","abab"则不是"回文". 其次就是顺序栈和链队如何实现回文的判断?将输入的字符串依次入栈和入队,然后再依次出栈和出队,由于入栈和入队是相同的序列,然而出栈和出队是相反的序列,这就实现了回文的判断. 最后考虑要用到顺序栈

2_3 回文判断

#include <stdio.h> #include <string.h> void main() { int x,i; char str[100]; //gets(st1); printf("Please input a string to find out whether the string is palindrome or not\n"); scanf("%s",str); x=strlen(str); for(i = 0; i &

冒泡排序与回文判断

冒泡排序:很简单就不细说了: #include <stdio.h> void bubbleSort(int num[],int len) { int i = 0; int j = 0; int temp = 0; for(j = 0;j<len-1;j++) { for(i = 0;i < len - j-1;i++) { if(num[i] > num[i+1]) { temp = num[i+1]; num[i+1] = num[i]; num[i] = temp; }

【字符串处理算法】回文判断的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序判断这个字符串是否是回文串. 为了便于说明,设定输入的字符串分为中文字符串和非中文字符串两种.其中,中文字符串中仅包含中文字符,非中文字符串中不包含中文字符. 所谓回文串,是指正读和反读都一样的字符串.下面举几个例子予以说明: 1."level"是一个非中文字符的回文串,因为正读和反读都是"level". 2."Good"不是一个非中文字符的回文串. 3."我爱我"是一个中文字符的回文串,

一天一算法:回文判断

问题描述: 什么是回文?如,aha, adda,单ahah就不是回文,等等 如何判断一串字符串是回文呢? 这里的想法是:我们利用队列的方式,找到字符的中间的位置,将中间字符之前的全部入栈,然后全部出栈,与中间字符之后的字符进行比较,如果全部一样,那么就是回文. 代码: #include<iostream> #include <queue> #include <string.h> using namespace std; int main() { char str[] =

回文判断

一个整形数是否是回文 also leetcode 9 Palindrome Number要求空间复杂度O(1)按位判断一般是/和%的游戏,首先取首位 a/h (h是最接近a的10的次方,比如12321,h预计算出是10000), 再取末位a%10; 比较首位和末位是否相等,不等就返回false; 如图: 然后舍弃掉已经比较过的两个位数,从a中去掉首尾 12321 --> 232. a = a % h; // 去掉首 a = a /10; //去掉尾 h = 100; // 因为已经去掉了两位 如

Manacher算法—最长回文串

若字符串长度为n,则算法的时间复杂度为o(n) 假设有一个字符串abaaba 先把该字符串变成$  #  a  #  b  #  a  #  a  #  b  #  a  # 第一个字符设为'$',防止计算的时候数组越界 再计算p数组,先给出p数组的答案 i为坐标,ma数组放改变后的字符串,p数组代表以该字符为中心,向右和向左延伸p[i]个,是回文串 i      0  1  2  3  4  5  6  7  8  9  10 11 12 13ma[]   $  #  a  #  b  #