• 回文判断


    题目描述

    回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如madam、我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多有趣的回文诗。

    那么,我们的第一个问题就是:判断一个字串是否是回文?

    分析与解法

    解法一:

    使用两个指针分别指向字符串的头尾,同时向中间遍历字符串,如果所有字符均相同,则是回文,代码如下:

     1 bool IsPalindrome(const char *str){
     2     if (str == nullptr)
     3         return false;
     4 
     5     int length = strlen(str);
     6     const char *begin = str;
     7     const char *end = begin + length - 1;
     8 
     9     while (begin < end){
    10         if (*begin != *end)
    11             return false;
    12         ++begin;
    13         --end;
    14     }
    15     return true;
    16 }
    时间复杂度为O(n),空间复杂度为O(1)

    解法二:
    从中间开始分别向两头遍历,检查字符是否都相同,代码如下:
     1 bool IsPalindrome2(const char *str){
     2     if (str == nullptr)
     3         return false;
     4 
     5     int length = strlen(str);
     6     if (length < 1)
     7         return false;
     8 
     9     const char *first, *second;
    10     int mid = length >> 1;
    11     first = str + mid - 1;
    12     second = str + length - mid;
    13 
    14     while (first >= str){
    15         if (*first-- != *second++)
    16             return false;
    17     }
    18     return true;
    19 }
    时间复杂度也为O(n),空间复杂度为O(1)
  • 相关阅读:
    一次网络IO优化的讨论
    服务器框架回顾
    一个小工具:DebugFile
    TPO-23 C2 Advice on choosing courses
    TPO-23 C1 Post a student announcement
    TPO-22 C2 Revise a music history paper
    TPO-22 C1 Complain about a biased article
    TPO-21 C2 Which elective courses to take
    TPO-20-Apply for the undergraduate research fund
    TPO-21 C1 Find a building for orientation
  • 原文地址:https://www.cnblogs.com/codinglol/p/4740778.html
Copyright © 2020-2023  润新知