如題,求的是不重複的最長子字符串,分析如下:
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);
}
}
爲了方便理解,沒有對代碼進行多餘加工,如果有興趣,試試自己修改成更加適合使用的工具類。