首页 > 试题广场 >

判断是否为回文字符串

[编程题]判断是否为回文字符串
  • 热度指数:92567 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。

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

数据范围:
要求:空间复杂度 ,时间复杂度
示例1

输入

"absba"

输出

true
示例2

输入

"ranko"

输出

false
示例3

输入

"yamatomaya"

输出

false
示例4

输入

"a"

输出

true

备注:
字符串长度不大于1000000,且仅由小写字母组成
python
方法1:库函数
class Solution:
    def judge(self , str ):
        # write code here
        
        if not str:
            return True
        
        # 库函数
        new_str = str[::-1]
        
        return new_str == str

方法2:
1、 比对left和right是否一致
2、一致,++left, right--
3、不一致,fasle
4、left == right 则退出
class Solution:
    def judge(self , str ):
        # write code here
        
        if not str:
            return True
        
        # 比对left和right是否一致
        # 一致,++left, right--
        # 不一致,fasle
        # left == right 则退出
        
        left = 0
        right = len(str)-1
        
        while left < right and left != right:
            
            if str[left] == str[right]:
                left +=1 
                right -=1
            else:
                return False
            
        return True
            



发表于 2021-01-24 15:10:39 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param str string字符串 待判断的字符串
     * @return bool布尔型
     */
    public boolean judge (String str) {
        // write code here
        int len=str.length();
        for(int i=0,j=len-1;i<j;i++,j--){
            if(str.charAt(i)!=str.charAt(j)){
                return false;
            }
        }
    return true;
    }
}

发表于 2021-09-06 21:19:16 回复(0)
相比字符串取反判断两个字符串相等
for循环方式判断,性能更好,运行速度更快:
function judge( str ) {
   var j = str.length;
    for(var i=0;i<str.length;i++){
        if(str[i] !== str[j-1-i]){
            return false;
        }
    }
return true;
}

字符串取反判断两个字符串相等,简单解法:
function judge( str ) {
var s=str.split("").reverse().join('');
   return s==str?true:false;
}

编辑于 2021-09-24 16:56:19 回复(0)
其实这道题,可以参考回文链表的思路,利用递归完成,但会stackoverflow
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param str string字符串 待判断的字符串
     * @return bool布尔型
     */
    int left=0;
    public boolean judge (String str) {
        // write code here
        char[] ss=str.toCharArray();
        int n=ss.length;
        if(n<2) return true;
        return helper(ss,0);
    }
    public boolean helper(char[] ss,int right){
        if(right==ss.length) return true;
        boolean flag=helper(ss,right+1);
        flag=flag&&(ss[left]==ss[right]);
        left++;
        return flag;
    }
}


发表于 2021-07-28 09:37:28 回复(0)
function judge( str ) {
    // write code here
    var len = str.length - 1;
    var num = Math.floor((len+1)/2);
    for(var i = 0; i < num; i++){
        if(str[i] != str[len-i]){
            return false;
        }
    }
    return true;
}

发表于 2021-04-24 11:14:01 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param str string字符串 待判断的字符串
     * @return bool布尔型
     */
    public boolean judge (String str) {
       return str.equals(new StringBuffer(str).reverse().toString());
    }
}
发表于 2021-12-26 12:15:45 回复(0)
public class Solution {
    public boolean judge (String str) {
        int i = 0, j = str.length()-1;
        while (i <= (str.length() >> 1)) {
            if (str.charAt(i) != str.charAt(j)) return false;
            i++;
            j--;
        }
        return true;
    }
}
发表于 2021-10-07 14:24:35 回复(2)
直接return判断正反是否一样即可
class Solution:
    def judge(self , str ):
        return str[:] == str[::-1]
发表于 2021-08-15 15:09:11 回复(0)
不知道为什么有那么多人喜欢调用库函数抖机灵,不想做算法题可以不做。
func judge( str string ) bool {
    // write code here
    for i := 0; i < len(str) / 2; i++ {
        if str[i] != str[len(str) - i - 1] {
            return false
        }
    }
    return true
}


发表于 2021-05-14 12:29:36 回复(2)
//也就是一行代码的事情
public boolean judge (String str) {
        return str.equals(new StringBuilder(str).reverse().toString());
    }

发表于 2021-01-26 21:56:07 回复(1)
public boolean judge (String str) {
       return new StringBuilder(str).reverse().toString().equals(str);
    }
发表于 2021-09-10 22:02:03 回复(0)
a=str(input())
b=a[::-1]
if a==b:
    print('true')
else:
    print('false')

编辑于 2021-06-09 21:57:08 回复(0)
//双指针,一旦发现不相等则返回false
    public boolean judge (String str) {
        int n=str.length();
        for(int i=0,j=n-1;i<j;i++,j--){
            if(str.charAt(i)!=str.charAt(j))
                return false;
        }
        return true;
    }

发表于 2021-07-17 10:01:26 回复(0)
语言:C语言
这里还要声明布尔类型头文件?
我不申明就编译错误,我看了大家的代码也没有申明啊
难道就C语言是这样的?但是string等怎么就能直接用呢?
------
思路:左右两边同时向内比较
提前结束就是不匹配,不是回文
#include <stdbool.h>        // 必须申明,否则编译错误
bool judge(char* str ) {
    // write code here
    int left, right;
    left = 0;
    right = strlen(str)-1;

    for (left; left <= right; right--, left++)
    {
        if (*(str+left) == *(str+right))
            continue;
        else
            break;
    }
    if (left <= right)
        return false;
    else
        return true;
}


发表于 2021-01-22 15:14:39 回复(1)
public boolean judge (String str) {
        for(int i=0;i<str.length()/2;i++){
            if(str.charAt(i)!=str.charAt(str.length()-1-i))
                return false;
        }
        return true;
    }

发表于 2022-01-03 11:26:43 回复(0)
两行代码:
public boolean judge (String str) {
        // write code here
        String str2 = new StringBuffer(str).reverse().toString();
        return str.equals(str2);
    }


发表于 2021-08-03 22:08:46 回复(3)
 bool judge(string str) {
        // write code here
        for(int i =0,j =str.size()-1;i<j;i++,j--){
            if(str[i]!=str[j])return false;
        }
        return true;
    }

发表于 2022-03-17 17:07:46 回复(0)
//左右双指针
function judge( str ) {
    if(str.length === 0) return true;
    let left = 0;
    let right = str.length - 1;
    while(left < right){
        if(str[left] !== str[right]){
            return false;
        }
        left++;
        right--;
    }
    return true;
}

//for循环法
function judge( str ) {
    for(let i = 0; i < Math.floor(str.length / 2); i++){
        if(str[i] !== str[str.length-i-1])
            return false;
    }
    return true;
}

发表于 2021-10-02 22:33:35 回复(0)
Python
刚写完NC17-求最大回文子串 写这道简直跟喝汤一样
class Solution:
    def judge(self , str ):
        # write code here
        if str==str[::-1]:
            return True


编辑于 2021-04-14 15:24:00 回复(0)
class Solution {
public:
    bool judge(string str) {
        string strTmp = str;
        reverse(str.begin(), str.end());
        return str == strTmp;
    }
};

发表于 2023-07-20 10:49:17 回复(0)