版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xidian2850/article/details/89633462
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是
"abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是
"b"
,所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是
"wke"
,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,
"pwke"
是一个子序列,不是子串。
//最后一个测试用例
String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTVWXZY0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_'{|}~ abcdefghjklmno...";
package explore.ziJieTiaoDong;
import java.util.HashSet;
import java.util.Set;
import javax.sound.midi.Transmitter;
public class lengthOfLongestSubstringC {
public static int lengthOfLongestSubstring(String s) {
/*
* 解决思路: 头尾相逼法
*/
int count = 0;
char[] list = s.toCharArray();
int L = 0;//最长子串的长度
int temp = 0;//当前子串的长度
if(list != null && list.length>0) {
L = 1;
for(int i=0; i<list.length; i++) {
for(int j=list.length-1; j>i; j--) {
if(list[i] != list[j]) {
boolean isRepect = false;
for(int k=i+1; k<j; k++) {
//遍历除头尾两个元素外的中间所有元素
if(list[i]==list[k] || list[j]==list[k]) {
isRepect = true;//中间有重复元素
break;//立即中断继续比较
}
}
if(isRepect==false) {
//中间的元素之间是否有相同的元素
boolean isSame = false;
for(int k=i+1; k<j; k++) {
for(int f=j-1; f>k; f--) { //f必须大于k
if(list[k] == list[f]) {
isSame = true;
break;
}
}
}
if(isSame == false) {
temp = j - i + 1;
if(temp > L) {
L = temp;
}
break;
}
}
}
}
}
}
return L;
}
public static void main(String[] args) {
// String s = "pwwkewa";
// String s = "pwwkew";
// String s = "sdfghkl";
// String s = "pwwkeww";
// String s = "abcdeff";
// String s = "abcabcbb";
// String s = "bbbbb";
String s = "pwwkew";
// String s = "aabcde";
System.out.println("L------: " + lengthOfLongestSubstring(s));
}
}
执行结果: