zoukankan      html  css  js  c++  java
  • 算法训练 字串统计

    问题描述
      给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
    输入格式
      第一行一个数字L。
      第二行是字符串S。
      L大于0,且不超过S的长度。
    输出格式
      一行,题目要求的字符串。

      输入样例1:
      4
      bbaabbaaaaa

      输出样例1:
      bbaa

      输入样例2:
      2
      bbaabbaaaaa

      输出样例2:
      aa
    数据规模和约定
      n<=60
      S中所有字符都是小写英文字母。
    提示
      枚举所有可能的子串,统计出现次数,找出符合条件的那个
     1 import java.text.DecimalFormat;
     2 import java.text.NumberFormat;
     3 import java.util.ArrayList;
     4 import java.util.Arrays;
     5 import java.util.Collection;
     6 import java.util.Collections;
     7 import java.util.List;
     8 import java.util.Scanner;
     9 import java.util.Stack;  
    10     public class Main{   
    11         public static void main(String[] args){ 
    12             Scanner input = new Scanner(System.in);
    13             int n = input.nextInt();
    14             String s = input.next();
    15             List<A> list = new ArrayList<A>();
    16             int h = 0;
    17             String temp;
    18             for(int i=0;i<s.length();i++){
    19                 for(int j=i+1;j<=s.length();j++){
    20                     if(j-i>=n){
    21                         temp = s.substring(i, j);
    22                         int k;
    23                         for(k=0;k<list.size();k++){
    24                             if(temp.equals(list.get(k).s)){
    25                                 list.get(k).n++;
    26                                 break;
    27                             }
    28                             
    29                         }
    30                         if(k==h){
    31                             A a = new A();
    32                             a.s = temp;
    33                             a.time = h;
    34                             list.add(a);
    35                             h++;
    36                         }
    37                     }
    38                 }
    39             }
    40             Collections.sort(list);
    41             System.out.println(list.get(list.size()-1).s);
    42         }
    43         static class A implements Comparable<A>{
    44             String s;
    45             int n;
    46             int time;
    47             @Override
    48             public int compareTo(A a) {
    49                 // TODO Auto-generated method stub
    50                 int result;
    51                 if(n!=a.n){
    52                     result = n-a.n;
    53                 }else if(s.length()!=a.s.length()){
    54                     result = s.length()-a.s.length();
    55                 }else{
    56                     result = a.time-time;
    57                 }
    58                 return result;
    59             }
    60         }
    61  }  
  • 相关阅读:
    计算机网络知识技能水平的测评试题
    Socket与系统调用深度分析
    学习构建调试Linux内核网络代码的环境MenuOS系统
    深入学习socket网络编程,以java语言为例
    网络配置工具iproute2和net-tools的基本原理和基本使用方法
    Linux系统学习总结报告
    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程
    深入理解系统调用-40号调用
    基于mykernel2.0 编写一个操作系统内核
    交互式多媒体图书平台的设计与实现
  • 原文地址:https://www.cnblogs.com/lolybj/p/6528419.html
Copyright © 2011-2022 走看看