• 牛客---判断回文串


    题目

    就是判断传入的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--;
            }
        }
    
    }
    
    
  • 相关阅读:
    HDU 1572 (DFS)
    UVA 439 BFS 骑士的移动
    STL next_permutation 和 prev_permutation
    Fire Net
    HDU 1026
    Awesome CS Courses 超级棒的课程
    Tensorflow 最佳实践样例程序-mnist
    关于交叉熵在loss函数中使用的理解
    神经网络训练程序,tensorflow
    神经网络前向传播算法的tensorflow实现。
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121840.html
Copyright © 2020-2023  润新知