大学生菜狗学习代码的第三天(判断回文字符串)

三天国庆假期结束了 TAT 该回来努力学习了

记得复盘一下前天的翻转字符串

今天开始学回文字符串

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

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

数据范围:0<n≤1000000

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

这个题之前在学习数据结构的时候有点印象

呃,也就记住了一个reverse()算法

当时还在想怎么解决这个字符串前后字母顺序交换问题

好嘛,直接一个函数调用解决了

给我气够呛

好吧,再多学几个解法,技多不压身

老规矩,先用JAVA

import java.util.*;


public class Solution {

    public boolean judge (String str) {

        int left = 0;                     //左指针定义为0
        int right = str.length()-1;         //有指针不为0,通过获取字符串长度-1确定下标位置

        while(left < right)    
            {
                if(str.charAt(left)!=str.charAt(right))    //charAt()方法一定要学会!
                    return false;

                    left++;                                //两个指针自增或自减继续进下一轮判断
                    right--;
            }
                return true;
            }        

    }

经典双指针,好用的一批

只不过有的时候这个JAVA的函数容易记混记错

还有

题解中的charAt()方法,返回指定索引处的char值,索引范围是从0到length() - 1。

有点像小学时候学的那种操场追及相遇问题,两个人对头跑,直到俩人相遇,再加上乱七八糟的限定条件,这样一想就没那么抽象了

换C++其实核心代码一样,在这不多写了

好,来reverse()

感觉C++更简单一点,先写它了

class Solution {
public:
    bool judge(string str) {
        string temp = str;
        reverse(str.begin(), str.end());   //reverse()简单粗暴直接翻转字符串
        if(temp == str)                    //翻转结束,回头判断与原字符串是否一致
            return true;                   //这个return是判断if条件是否成立,区别于下面一个return
        return false;
    }
};

很气,研究大半天算法,原来把问题想得复杂了

若改用JAVA来写,就显得没那么简便了

import java.util.*;
public class Solution {
    public boolean judge (String str) {
        StringBuffer temp = new StringBuffer(str);
        String s = temp.reverse().toString();   
        /*
        使用s暂存翻转后的字符串
        toString()用于返回以一个字符串表示的 Number 对象值
        如果方法使用了原生的数据类型作为参数,返回原生数据类型的 String 对象值。
        如果方法有两个参数, 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。
       */
        //比较字符串是否相等
        if(s.equals(str)) //判断
            return true;
        return false;
    }
}

没见过StringBuffer方法,百度了一下,明白了些许

StringBuffer 类可以比 String 类更高效地处理字符串。 StringBuffer 类是可变字符串类,创建StringBuffer 类的对象后可以随意修改字符串的内容。每个 StringBuffer 类的对象都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer 类对象的容量,则该对象的容量会自动扩大。

我的评价是,不如C++

题也解完了,知识也了解了

希望有一天我也能不用查阅网站直接做出算法题

我相信会等到这一天的到来

明天再见


版权声明:本文为m0_53367364原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。