如题,求的是不重复的最长子字符串,分析如下:
1:字符串需要遍历
2:出现重复字符时,需要重新遍历。
3:每次重新遍历需要去掉首位字符
ok,通过上述分析,选择使用递归方式进行解题,代码如下:
public class getLongestSubstr {
private static String longerStr = "";
private static int maxLonger = 0;
public static void getLonger(String target) {
if(target == null || target.length() == 0) {
return;
}
// 结束递归标识
boolean out = false;
StringBuffer sb = new StringBuffer();
for(int i=0; i<target.length();i++) {
String chat = target.charAt(i) + "";
if(!sb.toString().contains(chat)) {
sb.append(chat);
//判断是否已经遍历完整个字符串
if(i == target.length() -1) {
longerStr = sb.toString();
maxLonger = sb.length();
out = true;
}
} else {
if(maxLonger < sb.length() ) {
longerStr = sb.toString();
maxLonger = sb.length();
}
// 每次递归去掉首字母
target = target.substring(1);
// 不可能获得更长的子字符串了
if(maxLonger == target.length()) {
out = true;
}
break;
}
}
if(!out) {
getLonger(target);
}
}
public static void main(String[] args) {
getLonger("abcdekkkkkkkkqwertyuiopkjg");
System.out.println(longerStr);
}
}
为了方便理解,没有对代码进行多余加工,如果有兴趣,试试自己修改成更加适合使用的工具类。