zoukankan      html  css  js  c++  java
  • 某书2018面试题之最长对称子串

    一、题目
      输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出 4。
    二、思路

      遍历原字符串的所有子串,然后判断每个子串是否对称;该方法的时间复杂度:O(n3); 

    三、代码

    方法一的代码:

    package redbook;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /**
     * 我们让一个指针i从头至尾遍历,我们用另一个指针j从j=i+1逐一指向i后面的所有字符。就实现了原串的所有子串的遍历(子串为指针i到j中间的部分),最后判断得到的子串是否对称即可。
     */
    public class Main4 {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            //存储所有子串
            ArrayList<String> arrayList = new ArrayList<>();
    
            while (in.hasNext()) {
                //输入字符串
                String str = in.nextLine();
                //获取所有的子串
                StringBuffer sb = new StringBuffer();
                sb.append(str);
                for (int j = 0; j < sb.length(); j++) {
                    for (int i = j; i < sb.length() + 1; i++) {
                        arrayList.add(sb.substring(j, i));
                    }
                }
                //判断子串是否对称,如果对称获取其长度,然后返回最大的长度
               int theMaxLength=theMaxLength(arrayList);
                System.out.println(theMaxLength);
            }
        }
    
        public static int theMaxLength(ArrayList<String> arrayList) {
            int maxLength = 0;
            StringBuffer sb2 = new StringBuffer();
    
            for (int i = 0; i < arrayList.size(); i++) {
                String strTemp1 = arrayList.get(i);
               System.out.println(strTemp1);
                //字符串逆序
                String strTemp2 = sb2.append(strTemp1).reverse().toString();
                //将 sb2对象重新附值
                sb2=new StringBuffer();
                //获取对称子字符串的最大长度
                if(strTemp1.equals(strTemp2) && strTemp1.length()>maxLength){
                    maxLength=strTemp1.length();
                }
            }
            return maxLength;
        }
    }
    View Code

    ---------------------------------------------

    参考链接:

    http://www.cnblogs.com/mickole/articles/3578298.html

  • 相关阅读:
    MySQL必知必会(数据分组,Group by和Having子句, Select子句的顺序)
    MySQL必知必会(汇总数据, 聚集函数)
    MySQL必知必会(使用函数处理数据)
    菜根谭#206
    菜根谭#205
    菜根谭#204
    菜根谭#203
    菜根谭#202
    菜根谭#201
    菜根谭#200
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7729568.html
Copyright © 2011-2022 走看看