精华内容
下载资源
问答
  • 回文字符串C语言判断函数

    千次阅读 2016-11-24 09:21:16
    C语言判断字符串是否为回文

    C语言判断字符串是否为回文

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    /* if str is palindrome return 0,or return 1*/
    int ispalindrome(const char *str,int length)
    {
        int i = 0;
    
        if(str[0] == '\0')
            return 1;
    
        for(i = 0; i < length/2; i++)
        {
            if(str[i] != str[length-i-1])
                break;
        }
    
        if(i == length/2)
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }
    
    int main(int argc, char *argv[])
    {
        int ret = 0;
        if(argc != 2)
        {
            printf("the argument is not right\n");
            exit(1);
        }
    
        ret = ispalindrome(argv[1], strlen(argv[1]));
    
        if(0 == ret)
        {
            printf("%s is palindrome\n",argv[1]);
        }
        else
        {
            printf("%s is not palindrome\n",argv[1]);
        }
    
        return 0;
    
    }

    运行
    gcc test_palindrome.c

    ./a.out afdfa
    afdfa is palindrome

    ./a.out abd
    abd is not palindrome

    展开全文
  • 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba" 输出: True示例 2:输入: "abca" 输出: True 解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写...

    leetcode680. 验证回文字符串 Ⅱ

    给定一个非空字符串 s最多删除一个字符。判断是否能成为回文字符串。

    示例 1:

    输入: "aba"
    输出: True

    示例 2:

    输入: "abca"
    输出: True
    解释: 你可以删除c字符。

    注意:

    1. 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

    方法:双指针

    思路:

    验证回文字符串的方法很简单,就是双指针,一个从头,一个从尾,不断比较两个指针位置的字符是不是相同,相同就继续,不同直接返回False。直到头尾指针重合,返回True。

    本题同样是这种思路,只不过,由于可以删除一次,给了一次机会。

    同样头尾指针开始遍历,当遇到两个指针对应的字符不相同时,可以删除右边指针的,也可以删除左边指针的。那么我们只要继续判断这两种情况下,剩下的字符是不是回文即可。详细见代码

    代码:

    class Solution:
        def validPalindrome(self, s: str) -> bool:
            n = len(s)
            def test(x,y): #判断是否为回文字符串
                while x < y:
                    if s[x] == s[y]:
                        x += 1
                        y -= 1
                    else:
                        return False
                return True                        
            i = 0 #头指针
            j = n-1 #尾指针
            while i < j: #判断s初始是不是回文
                if s[i] == s[j]:
                    i += 1
                    j -= 1
                else: 
                    return test(i,j-1) or test(i+1,j) #删除s[i]或s[j]是否可以使得剩下为回文字符串
            return True

    结果:

    e33dd21aa7691f6d949cc0ec6ba7ca5e.png
    展开全文
  • 680. 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例1:输入: "aba" 输出: True示例2:输入: "abca" 输出: True 解释: 你可以删除c字符。注意:字符串只包含从 a-z的小写...

    112e4d71145c4afb5ef579c50f22e85a.png

    680. 验证回文字符串 Ⅱ

    给定一个非空字符串 s最多删除一个字符。判断是否能成为回文字符串。

    示例1:

    输入: "aba"
    输出: True

    示例2:

    输入: "abca"
    输出: True
    解释: 你可以删除c字符。

    注意:

    1. 字符串只包含从 a-z的小写字母。字符串的最大长度是50000

    题解:

    本题和125. 验证回文串很像,除去了标点符号和大小写,但是增加了可以删除一个元素的条件。我们还是创建双指针,这里我们选择将字符串s转换为char[]数组,这样能够提高速度。left指针向前遍历,right指针向后遍历,因为题目说了允许删除一个字符来构成回文字符串,所以我们在遇到第一个不是回文的两个字符后,可以通过isValidPalindrome方法判断夹在leftright之间的子串是不是回文子串。这样,当遇到第一组不相同的字符后,我们进入isValidPalindrome判断,如果子串继续不相同,那么就不是回文字符串,如果相同就是。

    具体代码如下:

    class Solution {
        public boolean validPalindrome(String s) {
            int left = 0, right = s.length() - 1;
            char[] chars = s.toCharArray();
            while (left < right) {
                if (chars[left] != chars[right])
                    //如果两个子串有一个不是回文子串,那么该字符串就不是回文字符串
                    return isValidPalindrome(chars, left + 1, right) || isValidPalindrome(chars, left, right - 1);
                left++;
                right--;
            }
            return true;
        }
    
        private boolean isValidPalindrome(char[] chars, int left, int right) {
            while (left < right) {
                if (chars[left++] != chars[right--])
                    return false;
            }
            return true;
        }
    }
    展开全文
  • 最先想到的是,把字符串反转,然后和原字符串比较。那么顺势总结一下字符串反转的方法。有的小伙伴可能会想到reverse()方法。但要注意,reverse()是列表才有的方法,用于字符串会报错。当然,把字符串转换成列表就...

    1aff6b41624e4dde4d66caa294febf4d.png

    本期知识分享,继续聊聊简单的算法。声明:本文仅面向编程初学者,大神勿入!如有错误和不足,请多多指教!提一个非常简单的问题:如何验证回文串。最先想到的是,把字符串反转,然后和原字符串比较。那么顺势总结一下字符串反转的方法。有的小伙伴可能会想到reverse()方法。但要注意,reverse()是列表才有的方法,用于字符串会报错。当然,把字符串转换成列表就可以:
    # 使用列表的reverse方法mystr = "abc"ls = list(mystr)ls.reverse()mystr1 = ''.join(ls)
    不过,这又是何必呢。内置函数reversed()可以用于各种序列,包括元组、列表、字符串、range等。要注意的是,它返回的是迭代器。
    mystr1 = ''.join(list(reversed(mystr)))
    这未免还是不太方便。别忘了,python有切片大法!
    mystr1 = mystr[::-1]
    简洁!优美!得劲!于是验证回文串的函数完成了:
    # 判断回文串def isp(s):    return s == s[::-1]
    这个方法好是好,但它不可避免地需要完成一次字符串反转。我的理解是,按照先反转再比较的思路,就不得不进行一次对字符串的完整遍历。于是,以“双指针”为噱头的解法出现了。说得这么玄乎,其实道理很简单:
    1. 左右两个指针分别指向字符串两端的字符;

    2. 不断地将两个指针相向移动,每次移动一步,并判断它们指向的字符是否相同,如果相同就继续移动一步,如果不同就说明原字符串不是回文串;

    3. 当两个指针相遇时,就说明原字符串是回文串。

    这个思路,大致有两种写法:
    # 判断回文串def isp1(s):    length = len(s)    for i in range(length//2):        if s[i]!=s[length-i-1]:            return False    return True
    # 判断回文串def isp2(s):    left, right = 0,len(s)-1    while left < right:        if s[left] != s[right]:            return False        left, right = left + 1, right - 1    return True
    我原以为不涉及字符串反转的双指针法会快一些,然而经测试,上述两种代码的运行速度都显著低于字符串反转。所以说,还是切片厉害啊。回到leetcode原题目:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,忽略字母的大小写。最开始,我立刻把题目拆解成两部分:处理字符串和验证回文串。而官方标答给出了一种骚操作:不事先处理字符串,直接在原始字符串上进行比较。如果不对字符串做提前处理,压力就转移到遍历时的每个字符身上,要先判断该字符是否为字母或数字,然后统一字母大小写。思路本身是简单的,要读懂代码需要稍微转一下脑子,注意看注释:
    # 判断回文串,官方标答def isPalindrome(s):    left, right = 0, len(s) - 1    while left < right:        # 左指针不断地向右移动,直到遇到一个字母或数字字符,或者两指针重合        while left < right and not s[left].isalnum():            left += 1        # 右指针不断地向左移动,直到遇到一个字母或数字字符,或者两指针重合        while left < right and not s[right].isalnum():            right -= 1        if left < right:            if s[left].lower() != s[right].lower():                return False            left, right = left + 1, right - 1    return True
    经测试,这个方法在时间上没有任何优势,但占用的内存空间减小了,说明它具有较小的空间复杂度不过,像我这种菜鸟,能考虑好时间复杂度就不错了。

    验证回文串,你学会了吗?

    下期预告:Python生成器

    往期精彩:

    用Python生成《平安经》!

    字符串保留特定字符

    参考资料:

    https://leetcode-cn.com/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-leetcode-solution/

    f2c97d159e558b03511de6bb84c76a81.png

    展开全文
  • 给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。示例1:输入: "babad"输出: "bab"注意: "aba"也是一-个有效答案。示例2:输入: "cbbd"输出: "bb" 这是一道非常经典的动态规划的题目,我是在...
  • 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"level" 、 “aba”。 超级简单 上代码 #include<stdio.h> #include<string.h> #define NUM 100 int main(){ char str[NUM]...
  • 详解判断回文字符串和回文数算法的C语言代码!一、判断一个字符串是否为回文字符串#include #include #include //包含strlen#define YES 1#define NO 0#define uchar unsigned char#define uint unsigned int#define...
  • 习题8-8 判断回文字符串C语言实现) #include <stdio.h> #include <string.h> #define MAXN 20 typedef enum {false, true} bool; bool palindrome( char *s ); int main() { char s[MAXN]; ...
  • 1 问题描述给定一个字符串,如何判断这个字符串是否是回文串?所谓回文串,是指正读和反读都一样的字符串,如madam、我爱我等。2 解决方案解决上述问题,有两种方法可供参考:(1)从字符串两头往中间扫;(2)从...
  • 程序分析:回文字符串回文字符串是指一个字符中的最高位与最低位的字符是一样的,次高位和次低位上的字符是一样的问题描述:判断一个字符串是否是回文字符串。程序分析:回文字符串回文字符串是指一个字符中的...
  • 一、判断一个字符串是否为回文字符串#include #include #include //包含strlen#define YES 1#define NO 0#define uchar unsigned char#define uint unsigned int#define ushort unsigned short#define ulong ...
  • 题目:给定一个字符串 s,找到 s 中最长的回文子串。...回文字符串就是整个字符串以中轴对称的字符串,比如:"abcdcba"、"abba"都是回文字符串。毫无疑问空字符串和长度为1的字符串都是回文字符串。如...
  • C语言:判断一个字符串是否为回问字符串(回文字符串也是一个字符串,但是原字符串和字符串逆序之后一样,比如”abcba","cddc"就是回文字符串
  • 647. 回文子串题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/palindromic-substrings题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由...
  • 所谓回文字符串,是指从左到右读和从右到左读完全相同的字符串。主要涉及知识点:字符数组的输入输出,及相应的处理。这个问题,可以从字符串的两头开始比较,即第1个字符和倒数第1个字符比较,第2个字符和倒数第2个...
  • C语言判断回文字符串代码
  • 336. 回文对题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/palindrome-pairs题目 给定一组唯一的单词, 找出所有不同的索引对 (i, j),使得列表中的两个单词, words[i] + words[j],可拼接成回文串。...
  • 请编写一个Python函数check_huiwen(s),判断非空字请编写一个Python函数check_huiwen(s),判断非空字符串s是否广义回文字用递归判断字符串是否为回文串(C语言) 用递归判断用递归来写程序,递归我不会写啊,那位大牛能...
  • 原文链接:LeetCode刷题DAY 1:回文数判断微信公众号:机器学习养成记相信很多小伙伴都感觉到行业内对模型算法工程师的要求越来越高,这种高要求不仅体现在对专业领域知识的理解应用,更体现在模型师同时要具备独立...
  • C语言回文字符串

    千次阅读 2019-10-07 20:04:09
    回文串”是一个正读和反读都一样的字符串字符串由数字和小写字母组成,比如“level”或者“abcdcba”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。 输入:包含多个测试实例,每一行对应一个...
  • C语言判断回文字符串(指针)

    千次阅读 多人点赞 2020-11-22 23:18:22
    编写函数:int fun(char *p),功能是判断一个字符串是否是回文字符串(提示:回文字符串是指正读和反读都一样的字符串),要求从主函数中由键盘输入字符串,调用函数fun后,根据函数fun的返回值,主函数输出是否为...
  • c语言判断是否是回文字符串

    千次阅读 2017-12-28 14:52:11
    回文字符串例子 abccba 、hellolleh 这些具有对称规则的字符串被称为回文字符串。 下面是回文字符串的一个判定函数。 /* 指针法判断是不是回文字符串 */ int plalindrome(char* dest) { char* begin = dest; ...
  • C语言判断回文字符串

    2021-05-10 09:44:51
    C语言判断回文字符串 我的思路: 回文:首尾回环 首和尾对比,两者向中间靠近,完全相同则回文,有一处不相同则不是回文 #include<stdio.h> void str_back(char *str); int main() { char str[100] = {0}...
  • 题目https://leetcode.com/contest/weekly-contest-210/problems/split-two-strings-to-make-palindrome/题意给定两个字符串 a 和 b,两者长度相同;寻找一个下标 index,从 index 处切割,将 a 分割为 aprefix 和 a...
  • 2.判断一个字符串是否为回文字符串。 #include intmain(void) { chara[100]; inti = 0, j = 0; printf("Please input string:"); gets_s(a,100); while(a[i] != '\0') i++; i--; for(; j { if(a[i] != a[j])
  • 判断一字符串是否是回文字符串 回文的意思即为该字符串从左往右读出来的值与从右往左读出来的值一样。 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str...
  • 本文详细讲解判断回文数和回文字符串的算法原理,并给出了完整的标准C语言代码,且提供标准函数接口,可供大家直接调用!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 539
精华内容 215
关键字:

回文字符串c语言

c语言 订阅