package com.interview.books.fgdsb;
/**
* Created_By: stefanie
* Date: 15-2-2
* Time: 下午3:22
*/
public class NLC22_ValidRollingString {
public boolean validate(String s, int A, int K){
int count = (int) Math.pow(A, K);
if(s.length() < count + K - 1) return false;
boolean[] mark = new boolean[count];
int base = 0;
int highest = (int) Math.pow(A, K - 1);
for(int idx = 0; idx < s.length(); idx++) {
if(idx >= K) {
base -= Character.getNumericValue(s.charAt(idx - K)) * highest;
}
int current = Character.getNumericValue(s.charAt(idx));
if(current >= A) return false;
base = base * A + current;
if(!mark[base]) {
mark[base] = true;
count--;
}
}
return count == 0;
}
public static void main(String[] args){
NLC22_ValidRollingString checker = new NLC22_ValidRollingString();
System.out.println(checker.validate("00110", 2, 2));//true
System.out.println(checker.validate("0011", 2, 2)); //false
System.out.println(checker.validate("001103",2,2));//false);
System.out.println(checker.validate("10110",2,2));//false);
System.out.println(checker.validate("00110",2,2));//true);
System.out.println(checker.validate("00111",2,2));//false);
System.out.println(checker.validate("4537860129",10,1));//true);
System.out.println(checker.validate("0123456789",10,2));//false);
}
}