力扣125 验证回文串

题目链接:https://leetcode.cn/problems/valid-palindrome/

一:直接法。

利用用isalnum()判断是否为数字和字母

s1为s去除非字母数字项并且字母转换为大写的字符串,s2为s1的翻转字符串,两者直接比较就行。

bool isPalindrome(string s) {

	string s1;
	for (auto i = 0; i <s.size(); i++) {
		if (isalnum(s[i])) {
			s1+=toupper(s[i]);
		}

	}
	string s2(s1.rbegin(), s1.rend());
	if (s1 != s2) {
		return false;
	}
	return true;
}

二:双指针

直接在原指针上进行操作,左右指针left,right分别从字符串最左最右边开始互相接近,越过非字母数字的项,进行比较。

class Solution {
public:
    bool isPalindrome(string s) {
        string sgood;
        for (char ch: s) {
            if (isalnum(ch)) {
                sgood += tolower(ch);
            }
        }
        int n = sgood.size();
        int left = 0, right = n - 1;
        while (left < right) {
           if (sgood[left] != sgood[right]) {
                return false;
            }
            ++left;
            --right;
        }
        return true;
    }
};

三:知识总结

1.isalnum()

isalnum()是一个字符处理函数,用于判断一个字符是否为字母(a - zA - Z)或者数字(0 - 9

2.string 中的 + 是直接拼接

3.翻转string

string s1(s.rbegin(),s.rend()),s1为s翻转后的字符串,这么做更加简单

当然也可以用reverse(),不过要注意该函数的返回值是迭代器类型,不能直接把返回值赋给字符串,只能翻转字符串。

reverse(str.begin(), str.end());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值