纪念逝去的岁月——C/C++字符串回文

判断字符串是否是回文:

1、

输入:hello world dlrow olleh

输出:1

2、

输入:nihao hello

输出:0

代码

#include <stdio.h>
#include <string.h>

int palindrome(char * p)
{
    if(NULL == p)
    {
        return 0;
    }
    int iLen = strlen(p);
    int iHalf = iLen / 2;
    int i = 0, iEnd = iLen - 1;
    for(i = 0; i <= iHalf; i++)
    {
        if(p[i] != p[iEnd - i])
        {
            return 0;
        }
    }

    return 1;
}

int main()
{
    char * p1 = "hello world dlrow olleh";
    char * p2 = "nihao hello";
    printf("%3s : %s\n", palindrome(p1) ? "yes" : "no", p1);
    printf("%3s : %s\n", palindrome(p2) ? "yes" : "no", p2);

    return 0;
}

编译

g++ -o palindrome palindrome.cpp

运行

$ ./palindrome
yes : hello world dlrow olleh
 no : nihao hello

再见……

时间: 2024-10-12 00:51:23

纪念逝去的岁月——C/C++字符串回文的相关文章

纪念逝去的岁月——C/C++字符串旋转

几年前,我还不会写这个 例如: 1.向右→旋转5个字符 输入:HelloWorld 输出:WorldHello 2.向右→旋转3个字符 输入:HelloWorld 输出:rldHelloWo 代码 1 #include <string.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int scrollstr(char * p, int iStep) 6 { 7 if(NULL == p) 8 { 9 return -

纪念逝去的岁月——C/C++字符串反转

几年前,我还不会写这个 输入:hello world 输出:dlrow olleh 代码 1 #include <stdio.h> 2 #include <string.h> 3 4 void cvtstring(char * pStr) 5 { 6 if(NULL == pStr) 7 { 8 return ; 9 } 10 int iLen = strlen(pStr); 11 int iStart = 0, iStop = iLen / 2; 12 int i = 0; 13

纪念逝去的岁月——C/C++排序二叉树

1.代码 2.运行结果 3.分析 1.代码 #include <stdio.h> #include <stdlib.h> typedef struct _Node { int value; struct _Node * pLeft; struct _Node * pRight; } Node; Node * getNewNode(int iValue) { Node * p = (Node *)malloc(sizeof(Node)); if(NULL != p) { p->

暑假集训7.11 字符串回文暴力

#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; #define MM(a,b) memset(a,b,sizeof(a)); const double eps = 1e-10; const int i

算法模板——线段树8 (字符串回文变换)

实现功能:输入一个长度为N的由26个大写字母组成的字符串,输入M条指令:"1 x y",将x到y的字串重组构成一个字典序最小的回文串,如果不能构成回文串输出False,否则True并完成变换:"2 x y"输出从x到y的子串:"3 x y t"将x到y的所有字全部变成chr(t+64)(即对应大写字母) 原理:用一个数组维护字母个数即可,然后再附带一个带tag的区间覆盖操作,实现回文串的重组 1 type 2 vec=array[0..26] o

字符串回文现象的递归判断

前面谈到了递归的一些思想,还有概念上的一些理解,这里试着用递归解决一些问题.比如回文. 回文是一种字符串,它正着读和反着读都是一样的.比如level,eye都是回文.用迭代的方法可以很快地判断一个字符串是否为回文.用递归的方法如何来实现呢? 首先我们要考虑使用递归的两个条件:澳门赌场玩法 第一:这个问题是否可以分解为形式相同但规模更小的问题? 第二:如果存在这样一种分解,那么这种分解是否存在一种简单情境? 先来看第一点,是否存在一种符合条件的分解.容易发现,如果一个字符串是回文,那么在它的内部一

说一下前天腾讯实习的笔试题--字符串回文问题(动态规划)

题目描述 最长回文子序列: 一个给定的字符串,求其最长回文子序列的长度; 一个回文子序列定义为原字符串的一个子序列去掉某些字符后生成的字符串为一个回文字符串; 例如cabbeaf:回文子序列有:c,a,aa,bb,,aba,abba,e,f,最长的就是abba,所以输出长度为4. 解题思路: 该问题为一个典型的动态规划问题,原串和反转串的最长公共子序列的长度即为该问题的解. 我实现的代码如下(我还多写了一些代码,用递归的方法来求解出了最长公共子序列的字符串): 1 #include <stdio

[网易]字符串回文分割

[题目] 将一个很长的字符串,分割成一段一段的子字符串,子字符串都是回文字符串.有回文字符串就输出最长的,没有回文就输出一个一个的字符. 例如:habbafgh 输出h,abba,f,g,h. [思路一] 基于"最长回文子串算法"求出当前字符串的最长回文子串,就可以分成3部分 a.最长回文子串left部分 b.最长回文子串 c.最长回文子串right部分 然后分别求a和c的最长回文子串 递归至每部分都成单个字符+当前最长回文子串,就可以分解成最终结果. [代码一] #include&l

Java实验--关于简单字符串回文的递归判断实验

首先题目要求写的是递归的实验,一开始没注意要求,写了非递归的方法.浪费了一些时间,所谓吃一堑长一智.我学习到了以后看实验的时候要认真看实验中的要求,防止再看错. 以下是对此次的实验进行的分析: 1)递归是运用到了栈的思想 2)回文是一段从中间开始倒置的文字,回代的过程中出现不同的符号的时候就说明这段文字不是回文了 根据上面对回文判断的分析,就拿最简单的121来说,要每个字符判断直至2所在的位置,然后依次回代判断前面的1和后面的1的位置(上述的描述就类似于栈的思想). 有关于栈还有递归其实我并不熟