博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 125. Valid Palindrome
阅读量:6435 次
发布时间:2019-06-23

本文共 3229 字,大约阅读时间需要 10 分钟。

https://leetcode.com/problems/valid-palindrome/

 

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example,

"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

Note:

Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

 

  • 字符串题。两种解法,一种是直接把string翻转比较,另一种是传统的首尾两个指针移动比较。
  • 注意对指针-- end,end不能为size_t类型, 否则一旦被减为-1则会被转变为INT_MAX,程序进入死循环。
  • 学习了string相关STL算法和函数,往string里添加char用push_back。
  • toupper - C++ Reference
    •   http://www.cplusplus.com/reference/cctype/toupper/
  • isalnum - C++ Reference
    •   http://www.cplusplus.com/reference/cctype/isalnum/?kw=isalnum
  • transform - C++ Reference
    •   http://www.cplusplus.com/reference/algorithm/transform/?kw=transform
  • string::push_back - C++ Reference
    •   http://www.cplusplus.com/reference/string/string/push_back/
  • reverse_copy - C++ Reference
    •   http://www.cplusplus.com/reference/algorithm/reverse_copy/
  • reverse_copy
    •   https://msdn.microsoft.com/zh-cn/library/c7ty5c36.aspx
1 #include 
2 #include
3 #include
// toupper, isalnum 4 #include
// transform 5 using namespace std; 6 7 class Solution { 8 public: 9 bool isPalindrome(string s) 10 {11 string sTemp = "", sReverse = "";12 13 // Convert characters to UPPER14 transform(s.begin(), s.end(), s.begin(), ::toupper);15 16 // considering only alphanumeric characters17 for (int i = 0; i < s.length(); i ++)18 if (isalnum(s.at(i)))19 sTemp.push_back(s.at(i)); // Appends character to the end of the string, increasing its length by one.20 21 // Need to allocate space if use reverse_copy22 sReverse.resize(sTemp.length());23 reverse_copy(sTemp.begin(), sTemp.end(), sReverse.begin());24 /*25 sReverse = sTemp;26 reverse(sReverse.begin(), sReverse.end());27 */ 28 /*29 cout << sTemp << endl;30 cout << sReverse << endl;31 */ 32 return sTemp == sReverse;33 }34 35 bool isPalindrome2(string s) 36 {37 int start = 0, end = s.length() - 1;38 39 while (start < end)40 {41 if ( !isalnum(s.at(start)) ) 42 start ++;43 else if ( !isalnum(s.at(end)) ) 44 end --;45 else if (toupper(s.at(start)) != toupper(s.at(end))) // Remember toupper 46 return false;47 else48 {49 // Remember to move ptr50 start ++;51 end --;52 }53 }54 55 return true;56 }57 58 };59 60 int main ()61 {62 Solution testSolution;63 string sTest[] = {
"A man, a plan, a canal: Panama", "race a car"};64 65 for (int i = 0; i < 2; i ++)66 cout << testSolution.isPalindrome(sTest[i]) << endl;67 68 getchar();69 70 return 0;71 }
View Code

 

转载于:https://www.cnblogs.com/pegasus923/p/5612541.html

你可能感兴趣的文章
java 读取环境变量和系统变量的方法
查看>>
Ajax学习总结(1)——Ajax实例讲解与技术原理
查看>>
Oracle 创建数据连接
查看>>
分布式存储技术及应用
查看>>
开源IDS:Snort还是Suricata?[更新于2019]
查看>>
Hibernate 注解简单总结
查看>>
nginx 内置变量大全
查看>>
js监听离开或刷新页面时的弹窗提示
查看>>
搞定微信告警
查看>>
开通了博客,没事也写写记录
查看>>
Git学习教程(二) :配置和初始化
查看>>
Oracle数据库之PL/SQL的”适配”新生
查看>>
正则表达式在 PHP 中的应用
查看>>
【MySQL】【翻译】 MySQL 5.7 的内部临时表新特性
查看>>
pip不灵解决办法
查看>>
Linux常用命令大全
查看>>
Ask Maclean精华帖索引(一)
查看>>
Scott Schema创建脚本
查看>>
Linux命令学习手册-tr命令
查看>>
libcmtd.lib(dbgheap.obj) : error LNK2005
查看>>