字串統計

flag

藍橋杯第19天

題目介紹

問題描述
  給定一個長度爲n的字符串S,還有一個數字L,統計長度大於等於L的出現次數最多的子串(不同的出現可以相交),如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。
輸入格式
  第一行一個數字L。
  第二行是字符串S。
  L大於0,且不超過S的長度。
輸出格式
  一行,題目要求的字符串。

輸入樣例1:
  4
  bbaabbaaaaa

輸出樣例1:
  bbaa

輸入樣例2:
  2
  bbaabbaaaaa

輸出樣例2:
  aa
數據規模和約定
  n<=60
  S中所有字符都是小寫英文字母。

思路

採用枚舉法,採用循環,最外層循環i爲字串長度,從L到n,第二層爲從字符串S中截取的長度爲i的字串,第三層爲S中與第二層字串相同的字串,然後進行計數統計。

代碼


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int L=input.nextInt();
        String S=input.next();
        int n=S.length();//S的長度

        String res="";//保存長度大於等於L的出現次數最多的子串
        int count=0;//保存res出現的次數

        for(int i=L;i<=n;i++){
            for(int j=0;j<=n-i;j++){
                String temp=S.substring(j,j+i);
                int tempCount=1;
                for(int k=j+1;k<=n-i;k++){
                    if(S.substring(k,k+i).equals(temp)){
                        tempCount++;
                        if(tempCount>count){
                            res=temp;
                            count=tempCount;
                        }
                        else if((tempCount==count)&&(temp.length()>res.length())){
                        //如果有多個,輸出最長的
                            res=temp;

                        }
                    }
                }
            }
        }
        if(res.equals(""))//這種情況爲每個字符都不一樣,如abcdefg
            System.out.println(S);
        else {
            System.out.println(res);
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章