leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串

敬请关注博客,后期不断更新优质博文,谢谢

每天坚持刷leetcode----给定一个字符串,找字符中的最大非重复子串

 

package leetcode.T003_LongestSubstringWithoutRepeatingCharacters;

import java.util.HashMap;
import java.util.Map;

/** 
 * @author  周志祥 E-mail: [email protected]
 * @date 创建时间:2017-4-30 下午5:32:40 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
public class Solution {
    public static void main(String[] args) {
    	String s = "cbbabcbabbaccab";
		System.out.println(lengthOfLongestSubstring(s));
		
	}
    
    /**
     * 
     * Given a string, find the length of the longest substring without repeating characters.
     * For example, the longest substring without repeating letters for "abcabcbb" is "abc",
     * which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
     *
     * 题目大意:
     * 给定一个字符串,找字符中的最大非重复子串
     *
     * 解题思路:
     * 用start记录当当处理的开始位置
     * 历遍字符串,当当前字符从开始位置start开始已经出现过的时候,子串开始位置+1,否则更新map中的hash值为当前位置。
     * 
* * @param s * @return */ // 可以处理所有的UTF-8字符 public static int lengthOfLongestSubstring(String s) { // 当前处理的开始位置(即:记录重复字符个数) int start = 0; // 无重复字符串最终长度 int result = 0; // 创建一个HashMap集合,用来存放遍历的字符和对应位置 Map map = new HashMap(s.length()); // 循环遍历字符串,判断是否有重复字符ch,可以用Map中的containsKey方法判断 for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); // 如果HashMap中包含该字符并且该字符的位置要大于start记录位置,就将start值增加1(记录重复字符个数) if(map.containsKey(ch) && map.get(ch) >= start) { start = map.get(ch) + 1; } // 如果不包含该字符,就将result结果增加(但是要去掉重复的字符个数,即:i-start+1) else { result = Math.max(result, i - start + 1); } // 将该字符和位置放入HashMap中 map.put(ch, i); } return result; } }

欢迎加入Java猿社区
 

leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串_第1张图片

 

 

 

 

你可能感兴趣的:(leetcode)