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

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

125. 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.

题目大意:

回文的检测。

思路:

1.清洗字符串,得到只有数字和字母的字符串。

2.通过比较首尾的字符来判断。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class 
Solution {
public
:
    
vector<string> stringSplit(string s, 
const 
char 
* split)
    
{
        
vector<string> result;
        
const 
int 
sLen = s.length();
        
char 
*cs = 
new 
char
[sLen + 1];
        
strcpy
(cs, s.data());
        
char 
*p;
     
        
p = 
strtok
(cs, split);
        
while 
(p)
        
{
            
printf
(
"%s\n"
, p);
            
string tmp(p);
            
result.push_back(tmp);
            
p = 
strtok
(NULL, split);
        
}
        
return 
result;
    
}
    
bool 
isPalindrome(string s) {
        
if 
(s.size() == 0 || s.size() == 1)
            
return 
true
;
        
vector<string> vecStrs = stringSplit(s,
" ~!@#$%^&*().,:;-?\"'`"
);
        
s = 
""
;
        
for 
(
int 
i = 0; i < vecStrs.size(); i++)
            
s += vecStrs[i];
        
if 
(s.size() == 1 || s.size() == 0)
            
return 
true
;
        
int 
i = 0;
        
for 
(; i < s.size() / 2; i++)
        
{
            
if 
(s[i] <= 57 ||  s[s.size() - i - 1] <= 57)
            
{
                
if 
(s[i] == s[s.size() - i - 1])
                
{
                    
continue
;
                
}
                
else
                
{
                    
return 
false
;
                
}
            
}
            
else 
if 
(s[i] == s[s.size() - i - 1] ||
                
s[i] - s[s.size() - i - 1] == 32 ||
                
s[s.size() - i - 1] - s[i] == 32)
            
{
                
continue
;
            
}
            
else
            
{
                
return 
false
;
            
}
        
}
        
return 
true
;
    
}
};

上面的做法效率低下,还有对API不熟悉。

下面是对上面的改进:

参考https://discuss.leetcode.com/topic/48376/12ms-c-clean-solution

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class 
Solution {
public
:
    
bool 
isPalindrome(string s) {
        
int 
i = 0, j = s.size() - 1;
        
while 
(i < j)
        
{
            
while 
(!
isalnum
(s[i]) && i < j) i++;
            
while 
(!
isalnum
(s[j]) && i < j) j--;
            
if 
(
tolower
(s[i++]) != 
tolower
(s[j--]))
                
return 
false
;
        
}
        
return 
true
;
    
}
};

这里使用了isalnum()函数来判断是否为文字数字。

通过使用tolower()来统一字符的大小写,都变为小写。

本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1836839

转载地址:http://rlcix.baihongyu.com/

你可能感兴趣的文章
MVC和MTV结构分析
查看>>
(转)微信网页扫码登录的实现
查看>>
mariadb启动报错:[ERROR] Can't start server : Bind on unix socket: Permission denied
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
河南农业大学c语言平时作业答案,河南农业大学2004-2005学年第二学期《C语言程序设计》期末考试试卷(2份,有答案)...
查看>>
c语言打开alist文件,C语言 文件的打开与关闭详解及示例代码
查看>>
c语言 中的共用体和结构体如何联合定义,结构体(Struct)、联合体(Union)和位域
查看>>
iOS UITableView表视图滚动隐藏UINavigationController导航栏
查看>>
SDL如何嵌入到QT中?!
查看>>
$(document).ready()
查看>>
P1026 统计单词个数
查看>>
[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
查看>>
poi excel 常用api
查看>>
AD提高动态的方法(附SNR计算)
查看>>
[转]轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统
查看>>
五 数组
查看>>
也谈跨域数据交互解决方案
查看>>
EntityFramework中使用Include可能带来的问题
查看>>
activity 用 service 更新界面
查看>>