牛客---判断回文串

题目

就是判断传入的String是不是回文字符串,是的话返回true,否则返回false。

举个例子

示例1
输入
“absba”
输出
true

示例2
输入
“ranko”
输出
false

思路

常见的有两种思路,一种是从两头向中间遍历,另一个是从中间向两头进行遍历。
时间复杂度是O(n),空间复杂度都是O(1);

代码实现

第一种是从两头向中间进行比较

public boolean judge (String str) {
        // write code here
        int i=0,j=str.length()-1;
        
        while(i<j){
            if(str.charAt(i)!=str.charAt(j)){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }

第二种是从中间向两头进行比较

public boolean judge (String str) {
        // write code here
        int i=0,j=str.length()-1;
        //从中心向两边进行扩展
        //如果字符串长度是偶数,两个不能相等,一个从中间向左遍历,一个从中间向右边遍历
        if((str.length()&1)==0){
            i=(str.length()>>1)-1;
            j=str.length()>>1;
        }else{
            //如果是奇数,那就都从最中心的元素开始
            i=j=(str.length()>>1);
        }
        while(i>=0&&j<str.length()){
            if(str.charAt(i)!=str.charAt(j)){
                return false;
            }
            i--;
            j++;
        }
        return true;
    }

在这里插入图片描述
还有一种是判断回文子串

来源是LeetCode647

题目

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:

输入:“abc”
输出:3
解释:三个回文子串: “a”, “b”, “c”
示例 2:

输入:“aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”

来源:力扣(LeetCode)

思路

主要从中间向两边计算子串的个数,关键点是计算出中心点的个数;什么是中心点,就是start和end初始指向的字符,那么中心点有几个呢?可能有1个或两个,例如上面的就是如果长度是偶数就有两个,如果是奇数就有1个;那整个字符串的中心点有几个呢?
答案是2length-1;
例如 aba:中心点有 a,b,a,ab,ba;个数 = 2
3-1=5;
再举个例子abcba: 中心点有a,b,c,b,a,ab,bc,cb,ba 个数=2*5-1=9;

代码实现

class Solution {
    int sum = 0;
    public int countSubstrings(String s) {
        for(int i=0;i<s.length();i++){
            //回文串长度是奇数
            count(s,i,i);
            //回文串长度是偶数
            count(s,i,i+1);
        }
        return sum;
    }

    public void count(String s,int start,int end){
        //从中间向两边计算回文子串,如果是的话,sum++;
        while(start>=0&&end<s.length()&&s.charAt(start)==s.charAt(end)){
            sum++;
            end++;
            start--;
        }
    }

}

原文地址:https://www.cnblogs.com/dataoblogs/p/14121840.html