《LeetCode刷题日记》 —— 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

注意空字符串以及字符串为 空格 ;需要熟练掌握java函数的使用;

我是通过拆分原字符串,然后拼接新字符串来计算的,性能不是很好,还需完善。如果注重性能的话,应该只考虑下标,而不是去维护一个新的字符串。

代码:

public class Demo3 {

	public static void main(String[] args) {
		String s = "dvdf";

		System.out.println(lengthOfLongestSubstring(s));

	}

	public static int lengthOfLongestSubstring(String s) {
		if (s.length() != 0 && s != null) {
			char[] arr = s.toCharArray(); // 将字符拆分成数组
			String info = ""; // 拼接字符串
			int max = 0; // 字符串最大长度
			for (int i = 0; i < arr.length; i++) {
				// 判断字符串中是否包含相同的字符
				if (info.indexOf(arr[i]) != -1) {
					// 判断当前字符串是不是最长字符串
					if (info.length() >= max) {
						max = info.length();
					}
					// 追加字符
					info += arr[i];
					// 从字符相同处截取成为新字符串
					info = info.substring(info.indexOf(arr[i]) + 1,
							info.length());
				} else {
					// 不包含相同字符直接追加
					info += arr[i];	
				}
			}
			return info.length() > max ? info.length() : max;
		} else {
			return 0;
		}
	}

}

 

你可能感兴趣的:(LeetCode)