How to solve substring problems?

3.Longest Substring Without Repeating Characters

1-split window

Or Using HashMap To store the latest index of the character.

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s == null || s.length() == 0)
            return 0;
        int[] map = new int[256];
        int left = 0, right = 0;
        int ans = 0;
        while(right < s.length()){
            char c = s.charAt(right);
            if(map[c] == 0){
                map[c] = 1;
                ans = Math.max(ans, right - left + 1);
                right++;
            }
            else{
                while(s.charAt(left) != c){
                    map[s.charAt(left)] = 0;
                    left++;
                }
                map[c] = 0;
                left++;
            }
        }
        return ans;

    }
}

395.Longest Substring with At Least K Repeating Characters

目前处理子串的方法有:

(1)双指针;

(2)dp;

(3)分治;

http://blog.csdn.net/u010900754/article/details/62159601

1-Split

class Solution {
    public int longestSubstring(String s, int k) {
        if(s == null || s.length() < k)
            return 0;
        if(k == 1)
            return s.length();
        int[] cnt = new int[26];
        for(int i = 0; i < s.length(); i++){
            cnt[s.charAt(i) - 'a']++;
        }
        int badCharIndex = -1;
        for(int i = 0; i < cnt.length; i++){
            if(cnt[i] > 0 && cnt[i] < k){
                badCharIndex = i;
                break;
            }
        }
        if(badCharIndex == -1)
            return s.length();

        char badChar = (char) (badCharIndex + 'a');
        String[] parts = s.split(badChar + "");
        int ans = 0;
        for(String part : parts){
            ans = Math.max(ans, longestSubstring(part, k));
        }
        return ans;
    }
}

results matching ""

    No results matching ""