美文网首页
035-判断一个字符串是否是回文

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

作者: Woodlouse | 来源:发表于2020-06-13 20:00 被阅读0次

    描述

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

    约束:

    ​ 空字符串为回文;

    示例:

    ​ ”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-判断一个字符串是否是回文

          本文链接:https://www.haomeiwen.com/subject/ddmztktx.html