46 字串统计
作者: Turbo时间限制: 1S章节: 基本练习(字符串)
问题描述 :
给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入说明 :
第一行一个数字L。
第二行是字符串S。
L大于0,且不超过S的长度。
n<=60
S中所有字符都是小写英文字母。
输出说明 :
一行,题目要求的字符串。
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
输入范例 :
4
bbaabbaaaaa
输出范例 :
bbaa
import java.util.Scanner;
public class test_46 {
/**
* 46 字串统计
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
String s = sc.next();
String temp,maxStr="",tempStr;
int p,count,maxCount=0;
//起始位置
for (int i = 0; i <s.length() ; i++) {
//字符串截取长度
for (int j = i+n; j <s.length() ; j++) {
count=0;
temp = s.substring(i,j);
tempStr = s.substring(i);
while(tempStr.indexOf(temp)!=-1){
count++;
//偏移量
p = tempStr.indexOf(temp);
//bbabbbbbbb 这种情况
tempStr = tempStr.substring(p+1);
}
//出现次数最多
if(maxCount<count){
maxStr = temp;
maxCount = count;
}
//出现次数一样多,输出最长的
if(maxCount == count && maxStr.length()<temp.length()){
maxStr = temp;
}
}
}
System.out.println(maxStr);
}
}