对字符串的操作,无论再难的算法题,只要时间充足,相信每个同学都可以搞定。
但是浪费太多时间去搞一个逻辑算法没太大意义,学会学习,不但可以增长自己的知识,更可以节省时间,俗话说,一寸光阴一寸金,寸金难买寸光阴。
我在写这个算法之前,也在网上查过,只是网上的答案太长了,所以就想把自己的结果写出来,供大家参考,如果有问题,希望可以及时提出。
题目:
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String str = scan.next();
String res = maxLetter(str,n);
System.out.println(res);
}
private static String maxLetter(String str,int n){
int m=0, tmp=0;
String st;
String res = null;
int mm=0, maxLen = 0;
int len = str.length();
Map<String,Object> arr = new LinkedHashMap<String,Object>();
Map<Object, Integer> mp = new LinkedHashMap<Object, Integer>();
//将字符串按条件拆分,组合成键(子串)值(子串出现的次数)对应的集合
//同时取出出现次数最多的次数
for(int i=n; i<=len; i++){
for(int k=0; k<len-i+1; k++){
st = str.substring(k, k+i);
if(arr.get(st) != null){
tmp = Integer.parseInt(String.valueOf(arr.get(st)));
arr.put(st, tmp+1);
}else{
arr.put(st, 1);
}
m = Math.max(m, Integer.parseInt(String.valueOf(arr.get(st))));
}
}
//运用迭代遍历的方式取出出现次数最多的子串,重新组合键(字符串)值(字符串长度)的集合
//因为可能会出现字符串出现次数相同,但字符串长度不同的情况,所以还要运用变量记录每个字符串的长度进行比较
//如果没有比第一个字符串长度更大的字符串,就去第一个,如果有,就取出相应的字符串
Iterator<?> it = arr.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
int value = Integer.parseInt(String.valueOf(entry.getValue()));
Object key = entry.getKey();
if(value==m){
value = String.valueOf(entry.getKey()).length();
mp.put(key, value);
mm = Math.max(mm, value);
}
if(mm>maxLen){
res = (String) key;
maxLen = mm;
}
}
// System.out.println(mm+" "+mp);
// System.out.println(maxLen+" "+res);
// System.out.println(m+" "+arr);
return res;
}
}
原文:http://www.cnblogs.com/dong-blog/p/6391045.html