题解 | #判断回文#

判断回文

http://www.nowcoder.com/practice/e297fdd8e9f543059b0b5f05f3a7f3b2

描述

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

示例1

输入:
"absba"

返回值:
true

示例2

输入:
"ranko"

返回值:
false

示例3

输入:
"yamatomaya"

返回值:
false

示例4

输入:
"a"

返回值:
true

思路

这道题时判断这个字符串是否时回文的,回文其实就是对称的意思。
咱们可以使用双指针的思维来解决这道题。

  1. 定义两个指针(begin、end)。 begin 指向字符串头部, end 指向字符串尾部。
  2. 比较两个指针对应的字符是否相等,不想等直接发挥 false;相等则 begin ++; end --。然后在判断,知道 end > begin 为止。

AC 代码

public boolean judge (String str) {
        // write code here
        if (str == null || str.length() < 1) {
            return false;
        }
        // 定义两个指针
        int begin = 0;
        int end = str.length() - 1;
        // 当 begin 没有超过 end 时
        while (end > begin) {
            // 如果两个指针对应的字符不相等,直接返回 false
            if (str.charAt(begin) != str.charAt(end)) {
                return false;
            }
            // 两个指针前进
            begin ++;
            end --;
        }
        // 这时候判断字符串时回文的
        return true;
    }

时间复杂度:O(N),N 字符串长度
空间复杂度:O(1)

最后

大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。

图片说明

全部评论

相关推荐

01-21 20:09
武汉大学 Java
点赞 评论 收藏
分享
思念SiN:你这里没有通过的主要原因应该是计算平均分数的时候,在你贴的代码的第23行: ```c b[i]=(sum-max-min)/(m-2); ``` 等式的右边实际上是两个`int`类型的变量在做除法,C语言里面得到的结果会是这个除法的整数部分,余数部分被舍弃了,也不会自动变成浮点数去做除法。所以虽然你使用了`b[i]`这个浮点数去接收结果,但是等式右边除法是先得到了一个整数,然后再被转换为浮点数再赋值给了`b[i]`。你可以按下面这样,在做除法之前,先进行类型转换,就能得到期望的结果: ```c b[i]=(float)(sum-max-min)/(float)(m-2); ```
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
01-07 00:20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务