一天一算法:回文判断

问题描述:

什么是回文?如,aha, adda,单ahah就不是回文,等等

如何判断一串字符串是回文呢?

这里的想法是:我们利用队列的方式,找到字符的中间的位置,将中间字符之前的全部入栈,然后全部出栈,与中间字符之后的字符进行比较,如果全部一样,那么就是回文。

代码:

#include<iostream>
#include <queue>
#include <string.h>
using namespace std;

int main()
{
    char str[] = "ahaha";
    char tmp[10] = {0};
    int middle = sizeof(str)/sizeof(char) / 2 -1 ;

    queue<char> str_queue;
    for (int i = middle - 1; i >= 0; i--) {
        str_queue.push(str[i]);
    }

    int i = 0;
    while (!str_queue.empty()) {
        tmp[i] = str_queue.front();
        str_queue.pop();
        i++;
    }
    tmp[i] = ‘\0‘;

    if (memcmp(str+3, tmp, 2) == 0 ) {
        cout << "Yes" << endl;
    } else {
        cout  << "No " << endl;
    }

}
时间: 2024-10-06 15:50:56

一天一算法:回文判断的相关文章

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."我爱我"是一个中文字符的回文串,

算法——回文解密,判断一个素组是否为回文

算法中,队列是先进先出原则,而栈是后进先出原则,栈限定只能在一端进行插入和删除操作,而栈的作用有哪些? 可以通过一组回文字符串来看:"xyzyx",同过栈来判断字符串是否是回文 案例:package test; /** * @author dayu 解密回文--栈 * @version 创建时间:2017年11月13日 下午2:15:01 * 类说明 */ public class zhan { //回文--一定有对称轴,所以一定是单数 public static void main(

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

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(&quo

回文判断

一个整形数是否是回文 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; // 因为已经去掉了两位 如

hdu4513--Manacher算法--回文串的O(n)算法

腾讯的比赛的题目的质量都很高 特别喜欢这题目背景 每题都很有意思 这题 也蛮难的 因为n太多了 一定要用O(n)的回文串算法来求 我是在这里学习的  传送 一般的话 都是char数组 使用特殊字符 表示插入 开头和末尾也是特别的字符 末尾的话是 '\0' 这边的话 因为是Int数组  要注意下 0 和 末尾不能取相同值 这样会错的 插入的值 一定要在这个Height范围外 1 #include <iostream> 2 #include <algorithm> 3 using na

[算法]回文检测

链表的回文检测 有关链表的回文检测,用到的就是链表操作中常常用到的双指针的方法,找到链表的中点位置,然后依次对比两边的结点.但是在找链表的中点的时候要注意链表的总个数是偶数或者奇数的两种情况. 1.找链表的中点位置,并把中点以前的各个结点的值存入到栈中. 2.针对偶数或者奇数个链表结点,对中点结点做一个小的调整. 3.依次对比栈中结点的值后链表后半部分结点的值是否相等,决定是否是回文结构. 代码实现: bool isPalindrome(ListNode* head) { bool isPali