版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flower_CSDN/article/details/81980169
剑指offer中的题,p237,看不懂书上的,就自己写了
package test;
/**
* 输出最长不重复子串
* 假设字符串中只包含'a'~'z'的字符。例如,在字符串
* "arabcacfr"中,最长的不含重复的子字符串是"acfr",长度为4。
* @author 17976
*
*/
public class LongString {
public static String longStr(String str) {
int maxLength=0;
char[] chs=str.toCharArray();
String resStr="";
char[] rs=new char[str.length()];
for(int i=0;i<str.length();i++) {
if(i==0) {
resStr+=chs[i];
}
else {
if(resStr.contains(chs[i]+"")) {
for(int j=0;j<resStr.length();j++) {
if(chs[i]==resStr.charAt(j)) {
int d=i-j;//当前不重复子串的长度
if(d>=maxLength) {
maxLength=d;
resStr+=chs[i];
// System.out.println("i"+i+"j:"+j+resStr+" "+resStr.length());
resStr=resStr.substring(j+1, resStr.length());
break;//如果不加break会一直循环,因为length被改变了
}
}
}
}
else {
resStr+=chs[i];
maxLength++;
}
}
}
return resStr;
}
public static void main(String[] args) {
String res=longStr("arabcacfr");
System.out.println(res+"---"+res.length());
//substring的beginindex是从0开始,左闭右开的
// System.out.println("arabcacfr".substring(0, 2));
}
}