【牛客刷题-算法】NC141 判断是否为回文字符串

简介: 【牛客刷题-算法】NC141 判断是否为回文字符串

1.题目


描述

给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。


字符串回文指该字符串正序与其逆序逐字符一致。


数据范围:0 < n ≤ 10000000 0 < n \le 100000000<n≤10000000

要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)


示例

image.png


2.算法设计思路


该题思路较为简单:只需从头、尾同时开始遍历字符串,逐个比较对应位置的字符是否相同即可。


具体到我使用的C语言,我们只需从字符数组的一端开始遍历,通过strlen()函数可以得到字符串的长度,由此我们就可以通过前面的下标计算出后面对称处的下标。同时我们并不需要循环遍历完整个数组,而只需遍历到数组的中间位置即可。


在遍历的过程中,一旦发现对应位置的字符出现不相同的情况,即可停止遍历,并返回false。如果遍历完发现对应位置字符都相同,则可返回true。


3.代码实现


注:这里并不是完整代码,而只是核心代码的模式
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param str string字符串 待判断的字符串
 * @return bool布尔型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
bool judge(char* str ) {
     // write code here
    int len = strlen(str);
    if(len <= 1){
        return true;
    }
    for(int i = 0; i <= (len - 1) / 2; i++){
        if(str[i] != str[len - 1 - i]){
            return false;
        }
    }
    return true;
}

4.运行结果


成功通过啦!


image.png


结束语:

今天的分享就到这里啦,快来加入刷题大军叭!


相关文章
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
2月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
18 0
|
4月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
4月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
45 0
|
6月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
6月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
6月前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
6月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
|
6月前
|
算法 C语言
【数据结构与算法 刷题系列】求链表的中间结点
【数据结构与算法 刷题系列】求链表的中间结点