力扣中的题
题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
看了网上的很多方法,理解起来感觉还不是很简单,因此和同学进行了探讨,想出了一个理解起来较为简单方法,利用了Java中的集合 ArrayList,它里面有一个contains()方法可以使得解决问题更容易一点。上代码:
方法一
import java.util.ArrayList;
import java.util.Scanner;
public class DifferentLong {
static int newnum = 0;//定义新的集合的长度
static int oldnum = 0;//定义旧的集合的长度
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要查询的字符串");
String s = sc.nextLine();
fun2(s);
}
private static void fun2(String s) {
if (s.length()==0){//判断字符串长度是否为0,如果是0就直接输出最终长度为0
oldnum = 0;
}else {
for (int j = 0; j < s.length(); j++) {
ArrayList<Character> strings = new ArrayList<>();//在这里重新new的原因是,下次循环的时候,应该是重新判断里面是否有重复字符串,
// 不然的话,就是使用的旧的字符串,就判断不了
for (int i = j; i < s.length(); i++) {
if (!strings.contains(s.charAt(i))) {
strings.add(s.charAt(i));
newnum = strings.size();
} else {
break;
}
if (oldnum <= newnum) {//如果新的长度大于等于旧的长度,就将新的赋给旧的,
//下次循环的时候判断出的最长的不相等的长度与上次oldnum进行比较
oldnum = newnum;
}
}
}
}
System.out.println(oldnum);
}
}
运行结果:
请输入你要查询的字符串
abca
3
方法二
import java.util.ArrayList;
import java.util.Scanner;
public class DifferentLong {
static int newnum = 0;//定义新的集合的长度
static int oldnum = 0;//定义旧的集合的长度
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要查询的字符串");
String s = sc.nextLine();
fun1(s);
}
private static void fun1(String s) {
if (s.length()==0){
oldnum=0;//如果字符串长度为1最终结果长度等于0
}else if (s.length()==1){
oldnum=1;//如果字符床长度等于1最终结果长度就等于1
}else {
for (int i = 0; i < s.length(); i++) {//因为我这里循环利用的是第一个和他后面的字符进行比较,
// 所以必须就在前面判断字符串长度是否是1,否则就不可以
ArrayList<Character> list = new ArrayList<>();
list.add(s.charAt(i));
for (int j = i+1; j < s.length(); j++) {
if (!list.contains(s.charAt(j))){
list.add(s.charAt(j));
newnum = list.size();
}else {
break;
}
}
if (oldnum<=newnum){
oldnum = newnum;
}
}
}
System.out.println(oldnum);
}
}
运行结果:
请输入你要查询的字符串
aaabbbccaadde
2