jq字符串中查找最长并且出现两次以上的一连串字符

qq_38892057 2018-10-29 03:04:14
例如:abcd12345bnfdvvabcd12345hhnvgabcd1234567abc 查找字符串挨着的字符串 出现两次的以上的最长字符串优先满足条件 上面查找结果为abcd12345 出现次数为3次
...全文
281 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38892057 2018-10-31
  • 打赏
  • 举报
回复
大神 能不能帮再改动一下
qybao 2018-10-31
  • 打赏
  • 举报
回复
给你个思路吧 遍历所有的子串,判断子串出现的次数,如果出现2次以上,并且当前子串长度大于之前的子串,则把当前的子串替换之前的子串 最后得到的子串就是结果 我这里偷懒了,用Map保存所有出现2次以上的子串,最后排序选出最长的子串。 LZ可根据我上面的思路自己再改改吧 (注释部分的代码就是思路的代码)

import java.util.*;
import java.util.regex.*;
public class Test {
	public static void test4() {
		String s = "abcd12345bnfdvvabcd12345hhnvgabcd1234567abc";
		Map<String, Integer> map = new HashMap<String, Integer>();
                //String result = "";
                //int times = 0;
		for (int i=0; i<s.length(); i++) {
			for (int j=i+1; j<=s.length(); j++) {
				String ss = s.substring(i,j);
				if (map.containsKey(ss)) {
					continue;
				}
				Pattern p = Pattern.compile(ss);
				Matcher m = p.matcher(s);
				int count = 0;
				while (m.find()) {
					count++;
				}
				if (count >= 2) {
					map.put(ss, count);
                                        //if (ss.length() > result.length()) {
                                        //    result = ss;
                                        //    times = count;
                                        //}
				}	
			}
		}
		//System.out.printf("max leng substring: %s, appear %d times.\n", result, times);
		if (map.size() > 0) {
			List<String> list = new ArrayList<String>(map.keySet());
			list.sort(new Comparator<String>() {
				public int compare(String s1, String s2) {
					return (s1.length() < s2.length()) ? 1 : -1;
				}
			});
			String key = list.get(0);
			System.out.printf("max leng substring: %s, appear %d times.\n", key, map.get(key));
		} else {
			System.out.printf("not found.\n");
		}
	}
}
qq593467574 2018-10-30
  • 打赏
  • 举报
回复

function test(){
var str="abcd12345bnfdvvabcd12345hhnvgabcd1234567abc";
var count=3;
alert(getSub(str,count));

}
function getSub(test,count){
var length=test.length; //要计算的字符串总长度
var startLen=parseInt(test.length/count); //要查找的字符串最大长度
for(var len=startLen;len>0;len--){
for(var index=0;index<=length-len;index++){
//获取子字符串
var subStr=test.substring(index,index+len);
console.log(subStr+",len="+len+"|index="+index);
var replaceStr=test.replace(new RegExp(subStr,'g'),"");
if((length-replaceStr.length)/len>=count){
return subStr;
}
}
}
return "No val";
}

十八道胡同 2018-10-30
  • 打赏
  • 举报
回复
import java.util.HashMap;
import java.util.Map;

public class Test04 {
public static void main(String[] args) {
String ss = "abcd12345bnfdvvabcd12345hhnvgabcd1234567abc";
new Test04().findSubString(ss, 1, 2);
}

/*
* minLength 字符串最短长度
* minCount 最少出现的次数
* */
void findSubString(String str, int minLength, int minCount) {
Map<Integer, String> result = new HashMap<Integer, String>();
for (int i = 0; i < str.length(); i++) {
for (int j = i + minLength; j < str.length(); j++) {
String tmpSur = str.substring(i, j);
int count = findCount(str, tmpSur);
if (count >= minCount) {
if (!result.containsKey(count)) {
result.put(count, tmpSur);
} else {
if (tmpSur.length() > result.get(count).length()) {
result.remove(count);
result.put(count, tmpSur);
}
}
}
}
}
System.out.println(result);
Integer finalCount = 0;
String finalStr = "";
for (Map.Entry<Integer, String> entry : result.entrySet()) {
if (entry.getValue().length() > finalStr.length()) {
finalStr = entry.getValue();
finalCount = entry.getKey();
}
}
System.out.println("finalStr=" + finalStr + ",出现了" + finalCount + "次");

}

public int findCount(String src, String des) {
int index = 0;
int count = 0;
while ((index = src.indexOf(des, index)) != -1) {
count++;
index++;
}
return count;
}
}

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧