首页 > 编程语言 >【算法每日一练及解题思路】多种方式判断指定字符串其是否为回文字符串

【算法每日一练及解题思路】多种方式判断指定字符串其是否为回文字符串

时间:2024-09-02 18:52:13浏览次数:12  
标签:一练 right return charAt str 字符串 回文 left

一、题目:给定一个字符串,判断其是否为回文字符串:

二、举例:

回文字符串是指一个字符串正读和反读都一样的字符串。例如,“level”、“radar”和“noon”都是回文字符串,因为它们从前往后读和从后往前读都是一样的
在Java中,有多种方法可以判断一个字符串是否为回文字符串。以下是一些不同的实现思路:

三、方法1:使用字符串反转

最直接的方法是将字符串反转,然后与原字符串比较。

public static boolean isPalindrome(String str) {
    String cleanStr = str.replaceAll("\\s+", "").toLowerCase();
    String reversedStr = new StringBuilder(cleanStr).reverse().toString();
    return cleanStr.equals(reversedStr);
}

四、方法2:双指针法

使用两个指针,一个从字符串的开始向后移动,另一个从字符串的末尾向前移动,比较两个指针指向的字符是否相同。

public static boolean isPalindrome(String str) {
    int left = 0, right = str.length() - 1;
    while (left < right) {
        while (left < right && !Character.isLetterOrDigit(str.charAt(left))) {
            left++;
        }
        while (left < right && !Character.isLetterOrDigit(str.charAt(right))) {
            right--;
        }
        if (Character.toLowerCase(str.charAt(left)) != Character.toLowerCase(str.charAt(right))) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

五、方法3:递归

递归地比较字符串的首尾字符,然后对中间的字符串进行递归判断。

public static boolean isPalindrome(String str) {
    if (str == null || str.isEmpty()) {
        return true;
    }
    str = str.replaceAll("\\s+", "").toLowerCase();
    if (str.length() < 2) {
        return true;
    }
    if (str.charAt(0) != str.charAt(str.length() - 1)) {
        return false;
    }
    return isPalindrome(str.substring(1, str.length() - 1));
}

九、总结

这些方法各有优缺点,可以根据实际情况选择最适合的方法。例如,对于非常长的字符串,使用双指针法可能更高效,因为它避免了额外的字符串复制和反转操作。而对于较短的字符串,递归方法可能更简洁。

标签:一练,right,return,charAt,str,字符串,回文,left
From: https://blog.csdn.net/u010425839/article/details/141826052

相关文章

  • 6.字符串类型和年龄游戏的升级
    数字和字符串类型对字符串的操作有如下变量name="aleX",请按照要求实现每个功能:1.移除name变量对应的值两边的空格,并输出处理结果2.判断name变量对应的值是否以"al"开头,并输出结果3.判断name变量对应的值是否以"X"结尾,并输出结果4.将name变量对应的值中的......
  • python入门每日一练2023/2/10
    python入门每日一练,可以提高您的python水平,今天是2月10日,上一课的答案是foriinrange(8):print(i)qq="xxxxxxxxx"email="@qq.com"如何将上面的字符串组成一段邮箱地址?......
  • python入门每日一练2023/2/13
    python入门每日一练,可以提高您的python水平,今天是2月13日,上一课的答案是foriinrange(1,len(strb)+1):ifstrb[i]==p:print(i)qq="qq"www="www"com=".com"如何组成www.qq.com网址?(难度★☆☆☆☆)......
  • python入门每日一练2023/2/14
    python入门每日一练,可以提高您的python水平,今天是2月14日,上一课的答案是url=www+qq+coma=3.1415926b=3.1415926c=a+bc等于几?(难度★☆☆☆☆)......
  • python入门每日一练2023/2/12
    python入门每日一练,可以提高您的python水平,今天是2月12日,上一课的答案是importrepat="python"a=re.findwall(pat,stra)print(a[0])strb="asdfghjklqwertyuiopzxcdweftgh"如何在上面的字符串中找到p在第几个?(难度★★☆☆☆)......
  • python入门每日一练2023/2/16
    python入门每日一练,可以提高您的python水平,今天是2月16日,上一课的答案是print(1)print("执行结束")while1==1:print(1)if5==1:breakprint("执行结束")如何简化这个代码?(难度★☆☆☆☆)......
  • python入门每日一练2023/2/21
    python入门每日一练,可以提高您的python水平,今天是2月21日,由于博主前段时间比较繁忙,最近都没有发,请谅解!上一课的答案是print("--------欢迎光临----------")print('初始化完成')defsayhello():print("hello")foriinrange(1,10)if1==1:print(i......
  • python入门每日一练2023/2/28
    python入门每日一练,可以提高您的python水平,今天是2月28日,上一课的答案是print(str(111)+"\n"+str(222))print(range(1,10)[0])结果?(难度★★☆☆☆)......
  • python入门每日一练2023/2/27
    python入门每日一练,可以提高您的python水平,今天是2月27日,上一课的答案是print(1)print(111)print(222)如何让代码在一行内实现?(难度★★☆☆☆)......
  • 41. 强化训练-字符串类封装
    强化训练-字符串类封装myString类实现自定义的字符串类属性char*pString;维护在堆区真实开辟的字符数组intm_Size;字符串长度行为有参构造MyString(char*str)拷贝构造MyString(constMyString&str);析构~MyString();重载<<运算符重载>>运算符重载......