java 实现 一个字符串中不重复最长子串

求java实现一个字符串中不重复最长子串... 求java 实现 一个字符串中不重复最长子串 展开
 我来答
haonannan3
2017-09-21
知道答主
回答量:14
采纳率:100%
帮助的人:8.5万
展开全部
/** 注意:如果一个函数有多个长度相等的不重复子串,本函数只能得到其中的第一个子串,
* 如果要输出所有子串,稍作修改即可
*/
public static String noDuplicate(String s) {
/**
 * 这个函数返回给定字符串中最长不重复子串 采用类似纸牌游戏拖板车的思维
 */
String result = ""; // 记录最终结果,即最长子串
String sub = ""; // 记录当前纸牌串
for (int i = 1; i < s.length(); i++) { // 一张张发牌
String c = "" + s.charAt(i); // 当前新发下来的牌
if (!sub.contains(c)) { // 如果当前纸牌串中不包含新发的牌
sub += c; // 将新牌加入当前纸牌串
} else { // 如果当前纸牌串中包含新发的牌
if(result.length()<sub.length()){ //如果当前子串比最优记录长
result = sub; // 更新最优记录
}
String[] temp = sub.split(c); //将子串按当前牌分割为两部分
sub = temp[1]; // 取后一部分作新的当前纸牌串,丢弃重复牌及其前面部分
sub+=c; // 将新牌加入当前纸牌串
}
}
// 比较最后一个当前纸牌串与最优记录
if(result.length()<sub.length()){ //如果当前子串比最优记录长
result = sub; // 更新最优记录
}
return result; 
}
arrow7880
推荐于2016-09-27 · TA获得超过100个赞
知道答主
回答量:140
采纳率:100%
帮助的人:117万
展开全部
public static String noDuplicate(String str) {
    String sub = "";
    String result = "";
    for (int i = 0; i < str.length(); i++) {
        String c = "" + str.charAt(i);
        if (sub.contains(c)) {
            if (sub.length() > result.length()) {
                result = sub;
            }
            sub = "";
        }
        sub += c;
    }
    if (sub.length() > result.length()) {
        result = sub;
    }
    return result;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xaut_xb
2014-06-23 · TA获得超过152个赞
知道答主
回答量:170
采纳率:0%
帮助的人:87.7万
展开全部
你需要的是在几个字符串中找出来一个不重复最长子串,还是写出一个不重复最长子串
更多追问追答
追问
aabcdrwrqwrqerdeffhih   打印出abcdrw
追答
public static void longestNodupSubstring(String string)   

{

int len = string.length();

if(len>0){

Map cursor = new HashMap();

cursor.put(string.charAt(0), 0);

int [] lengthAt = new int[string.length()];

lengthAt[0] =1;

int max =0;

for(int i = 1 ;i<len;i++){

char c = string.charAt(i);

if(cursor.containsKey(c)){

lengthAt[i] = Math.min(lengthAt[i-1]+1, i-cursor.get(c));

}else {

lengthAt[i] = lengthAt[i-1]+1;

}

max = Math.max(max, lengthAt[i]);

cursor.put(c, i);

}

for(int i=0;i<len;i++){

if(max == lengthAt[i]){

System.out.println(string.substring(i-max+1, i+1));

}

}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无厘头吧
2014-06-23 · TA获得超过571个赞
知道小有建树答主
回答量:531
采纳率:62%
帮助的人:156万
展开全部
最长。。。。。。
字符串最长是多长。。。。
追问
aabcdrwrqwrqerdeffhih   打印出abcdrw
追答
public String longestStr(String str) {
StringBuilder sb = new StringBuilder();
String retStr = "";
for (char s : str.toCharArray()) {
if (!sb.toString().contains(String.valueOf(s))) {
sb.append(s);
if (retStr.length() < sb.length())
retStr = sb.toString();
} else {
sb.delete(0, sb.length());
}
}
return retStr;
}


是这个意思吧:

"asdfgasdfqwe`12123jkl我去阿斯顿我1234567890去维尔2体育即可"

返回

"1234567890去维尔"


求采纳!!!!!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式