035-判断一个字符串是否是回文

描述

判断一个由字母、数字和空格组成的字符串是否是回文。

约束:

​ 空字符串为回文;

示例:

​ ”A man, a plan, a canal: Panama”是回文

”race a car” 非回文。

分析

采用两端遍历的方法,分别从左向右,从右向左进行遍历。

1)左索引为非字母、非数字则向右移动一个位置;

2)右索引为非字母、非数字则向左移动一个位置;

3)左右索引的值不相等,判断为非回文;

4)左索引大于等于右索引则字符串为回文,结束循环;

实现

bool isPalindrome(string s)
{
    transform(s.begin(), s.end(), s.begin(), ::tolower);
    auto left = s.begin();
    auto right = prev(s.end());
    while (left < right) {
        if (!::isalnum(*left)) {
            ++left;
        }
        else if (!::isalnum(*right)) {
            --right;
        }
        else if(*left != *right) {
            return false;
        }
        ++left;
        --right;
    }
    
    return true;
}

时间复杂度为O(n),空间复杂度为O(1)

你可能感兴趣的:(035-判断一个字符串是否是回文)