zoukankan      html  css  js  c++  java
  • 找最长连续重复字母子串

    求一个字符串中最长的连续重复字母子串?要点:最长的,重复的。子串中的重复数目至少为2!

    代码实例:

    /**
    * 求字符串中最长重复子串
    */
    public class MaxStr {
    public static String getMaxString(String str){
    String result = "";
    /**
    * 对传入的数据进行处理
    */
    int i=1;//从子字符串的长度为:1,2,3,4......str.len-1;

    int nummax = 0;

    for (; i < str.length(); i++) {
    //对子字符串长度为1,2,3,4,....str.len-1的子串集进行分析
    //保存当前长度为i的子串集合
    String[] temp = new String[str.length()-(i-1)];
    //对每一个子字符串 建立一个变量保存其重复数
    int[] nums = new int[str.length()-(i-1)];

    for (int j = 0; j < temp.length ; j++) {
    temp[j]= str.substring(j,j+i);
    System.out.print(temp[j]+" ");
    }
    //求出子串集中重复的子串的数
    System.out.println();
    for (int j = 0; j < temp.length ; j++) {
    nums[j]=0;//初始值为1
    for (int k = 0; k < temp.length; k++) {
    if(temp[j].equals(temp[k])){
    nums[j]++;
    }
    }
    System.out.print(nums[j]+" ");
    if(nums[j]>=2){
    nummax = nums[j];
    result = temp[j];
    }
    }

    System.out.println();
    /**
    * a,s,d,k,d,n,a,s,d,a,
    * as,sd,dk,kd,dn,na,as,sd,da,
    * asd,sdk,dkd,kdn,dna,nas,asd,sda,
    * asdk,sdkd,dkdn,kdna,dnas,nasd,asda,
    * asdkd,sdkdn,dkdna,kdnas,dnasd,nasda,
    * asdkdn,sdkdna,dkdnas,kdnasd,dnasda,
    * asdkdna,sdkdnas,dkdnasd,kdnasda,
    * asdkdnas,sdkdnasd,dkdnasda,
    * asdkdnasd,sdkdnasda,
    */
    //每一个子串集中 每一个元素对应的个数

    }
    return result;
    }
    public static void main(String[] args) {

    String result = getMaxString("asdkdnasda");
    System.out.println("测试结果如下:"+result);
    }
    }

    运行结果和答案如下:
    a s d k d n a s d a
    3 2 3 1 3 1 3 2 3 3
    as sd dk kd dn na as sd da
    2 2 1 1 1 1 2 2 1
    asd sdk dkd kdn dna nas asd sda
    2 1 1 1 1 1 2 1
    asdk sdkd dkdn kdna dnas nasd asda
    1 1 1 1 1 1 1
    asdkd sdkdn dkdna kdnas dnasd nasda
    1 1 1 1 1 1
    asdkdn sdkdna dkdnas kdnasd dnasda
    1 1 1 1 1
    asdkdna sdkdnas dkdnasd kdnasda
    1 1 1 1
    asdkdnas sdkdnasd dkdnasda
    1 1 1
    asdkdnasd sdkdnasda
    1 1
    测试结果如下:asd

    分析:遍历时,将字符串安装长度为1,2,3......str.lenth()-1 分割,如当长度为1时,得到的结果为。temp[1]={a,s,d,k,d,n,a,s,d,a}
    遍历temp[1]获得重复数int[] nums为{3,2,3,1,3,1,3,2,3,3} 此时 最大重复数为nummax=3 result="a"
    依次遍历 temp[2],temp[3],... 如果有重复的,num[x]>=2 那么子字母串肯定比前面找到的长。



    不要因为怕被玫瑰的刺伤到你,就不敢去摘玫瑰。
  • 相关阅读:
    表删除 准备
    爱可生技术文档
    Bran的内核开发指南_中文版
    LINUX 内核内存管理
    Linux Container测试之block IO
    【实时文件同步】rsync+inotify-tools的安装与配置
    openlayer3 加载geoserver发布的WFS服务
    Geoserver跨域请求设置
    Bitmap 图片格式并用 C++ 读写 Bitmap
    C++中的对象初始化
  • 原文地址:https://www.cnblogs.com/gccwelcome/p/12784818.html
Copyright © 2011-2022 走看看