社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
一、题目
二、解题:
for(int i=0;i<=str.length()-2;i++) {
map.put(str.charAt(i),i);
for(int j=i+1;j<str.length();j++) {
char key=str.charAt(j);
if(!map.containsKey(key)) {
map.put(key, j);
count++;
}else {
max=max>count? max:count;
count=1;
map.clear();
break;
}
max=max>count? max:count;//"au"
}
}
for(int i=0;i<str.length();) {
char key=str.charAt(i);
if(!map.containsKey(key)) {
map.put(key,i);
count++;
i++;
}else {
max=max>count? max:count;
count=0;
int value=map.get(key)+1;
map.clear();
i=value;
}
}
return max>count? max:count;//" "或"a"
int i=0;
for(int j=0;j<str.length();) {
char key=str.charAt(j);
if(!map.containsKey(key)) {
map.put(key, j);
count++;
j++;
}else {
max=max>count? max:count;
int value=map.get(key)+1;
for(;i<value;i++) {
map.remove(str.charAt(i));
count--;
}
}
}
return max>count? max:count;//" "或"a"
完整代码如下:
/**
* 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
*
*
* //将字符串-->字符数组
char[] ch=new char[str.length()];
str.getChars(0, str.length(), ch, 0);
System.out.println(ch);
System.out.println("".length()+" "+" ".length());//0 1
* @author dell
*
*/
public class TestStringNoRepeat {
/**
* n^2
* while循环 【不推荐使用】
* @param str
* @return
*/
public int solution(String str) {
if(str.equals("") || null==str){
return 0;
}
int i=0;
int j=1;
int max=1;
int count=1;
HashMap<Character,Integer> map=new HashMap<>();
map.put(str.charAt(i), i);
while(i<=str.length()-2) {
char key=str.charAt(j);
if(!map.containsKey(key)) {
map.put(key, j);
count++;
j++;
}else {
map.clear();
if(max<count) {
max=count;
}
count=1;
i++;
map.put(str.charAt(i), i);
j=i+1;
}
if(j>=str.length()) {
return max>count? max:count;
}
}
return max;
}
@Test
public void test() {
// int max=this.solution("abcdda");
// int max=this.solution("pwwkew");
int max=this.solution("pppp");
System.out.println("max:"+max);
}
/**
* 使用双层for循环的 n^2
* @param str
* @return
*/
public int solution2(String str) {
if(str.equals("") || null==str){
return 0;
}
int max=1;
int count=1;
HashMap<Character,Integer> map=new HashMap<>();
for(int i=0;i<=str.length()-2;i++) {
map.put(str.charAt(i),i);
for(int j=i+1;j<str.length();j++) {
char key=str.charAt(j);
if(!map.containsKey(key)) {
map.put(key, j);
count++;
}else {
max=max>count? max:count;
count=1;
map.clear();
break;
}
max=max>count? max:count;//"au"
}
}
return max;
}
@Test
public void test2() {
int max=this.solution2("abcdda");
// int max=this.solution2("pwwkew");
// int max=this.solution2("pppp");
System.out.println("max:"+max);
}
/**
* 使用HashMap,一层for循环,不过远远>>n 不过速度却不快128ms
* @param str
* @return
*/
public int solution3(String str) {
if(str.equals("") || null==str){
return 0;
}
int max=0;
int count=0;
HashMap<Character,Integer> map=new HashMap<>();
for(int i=0;i<str.length();) {
char key=str.charAt(i);
if(!map.containsKey(key)) {
map.put(key,i);
count++;
i++;
}else {
max=max>count? max:count;
count=0;
int value=map.get(key)+1;
map.clear();
i=value;
}
}
return max>count? max:count;//" "或"a"
}
@Test
public void test3() {
// int max=this.solution3("abcdda");
// int max=this.solution3("pwwkew");
int max=this.solution3("pppp");
System.out.println("max:"+max);
}
/**
* 同上,思想更加精确版 【10ms】
* @param str
* @return
*/
public int solution4(String str) {
if(str.equals("") || null==str){
return 0;
}
int max=0;
int count=0;
HashMap<Character,Integer> map=new HashMap<>();
int i=0;
for(int j=0;j<str.length();) {
char key=str.charAt(j);
if(!map.containsKey(key)) {
map.put(key, j);
count++;
j++;
}else {
max=max>count? max:count;
int value=map.get(key)+1;
for(;i<value;i++) {
map.remove(str.charAt(i));
count--;
}
}
}
return max>count? max:count;//" "或"a"
}
@Test
public void test4() {
// int max=this.solution4("abcdda");//4
// int max=this.solution4("pwwkew");//3
// int max=this.solution4("pppp");//1
int max=this.solution4("aab");//2
System.out.println("max:"+max);
}
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!