1639。具有K個不同字元的子串
阿新 • • 發佈:2019-01-09
求一個空間佔用更少的演算法!!!!!!!!!!!!!!
給定字串S和整數K.
計算長度為K且包含K個不同字元的子串數
樣例
String: "abcabc"
K: 3
Answer: 3
substrings: ["abc", "bca", "cab"]
String: "abacab"
K: 3
Answer: 2
substrings: ["bac", "cab"]
注意本題目的測試字串長度極大,我測試了好多此最後才沒有,報空間不足的錯誤。
import java.util.*; public class Solution { /** * @param stringIn: The original string. * @param K: The length of substrings. * @return: return the count of substring of length K and exactly K distinct characters. */ public int KSubstring(String stringIn, int K) { // Write your code here if(stringIn.length()<K) return 0; int j; char t; Set<String> resultset = new TreeSet<>(); Set<Character> set = new TreeSet<>(); for(int i=0;i<stringIn.length();i++){ j=0; for(;i+j<stringIn.length();j++){ t=stringIn.charAt(i+j); if(set.contains(t)){ set.clear(); for(int k=j-1;k>=0;k--){//找到回退的下標 if(stringIn.charAt(i+k)==t){ i=i+k; break; } } break;//找到下標後退出迴圈 } else set.add(t); if(set.size()>=K){ resultset.add(stringIn.substring(i+j-K+1,i+j+1));//去除重複子串 } } } return resultset.size(); } }