【leetcode】验证回文串 叁歲伎倆 2023-02-11 04:59 114阅读 0赞 【题目】 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjg2Mzcz_size_16_color_FFFFFF_t_70] 【解题思路一】 * 首尾指针法,一个从首找,一个从尾找; * 只考虑字母和数字字符,可以忽略字母的大小写。 class Solution { bool IsNumberOrLetter(char c) { if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) return true; return false; } public: bool isPalindrome(string s) { if (s.empty()) return true; int begin = 0; int end = s.size() - 1; while (begin < end) { while (begin < end) //从前往后找一个数字字符或者字母 { if (IsNumberOrLetter(s[begin])) break; ++begin; } while (begin < end)//从后往前找一个数字字符或者字母 { if (IsNumberOrLetter(s[end])) break; --end; } if (begin < end) //检测begin和end位置字符是否相等或是否不区分大小的相等 { if ((s[begin] + 32 - 'a') % 32 != (s[end] + 32 - 'a') % 32) return false; ++begin; --end; } } return true; } }; 【解题思路二】 * 同一,首尾指针法; * 区别:使用C++内置函数;重新引入一个串,将原串的数字和字母存入;题目说可以忽略字母大小写,在此处,将所有字母置为小写字母,也满足题意。 c++的几个内置函数: islower(char c) 是否为小写字母 isupper(char c) 是否为大写字母 isdigit(char c) 是否为数字 isalpha(char c) 是否为字母 isalnum(char c) 是否为字母或者数字 toupper(char c) 字母小写转大写 tolower(char c) 字母大写转小写 class Solution { public: bool isPalindrome(string s) { string str = ""; //定义一个空字符串 //将s字符串遍历:将数字、字母且大写转为小写的字母均存在str字符串中 for(auto c: s) //C++11 auto用法 { if(isalnum(c)) //isalnum():是否为字母或者数字 str += tolower(c); //tolower():字母大写转小写 } //首尾指针遍历str字符串,判断是否相等 for(int i = 0, j = str.size() - 1; i < j; i++, j--) { if(str[i] != str[j]) return false; } return true; } }; [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjg2Mzcz_size_16_color_FFFFFF_t_70]: https://img-blog.csdnimg.cn/20200522081443569.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjg2Mzcz,size_16,color_FFFFFF,t_70
还没有评论,来说两句吧...