假设有一个字符串s = abcaa且整数k = 3。
我必须找到对(i,j)的数量,使得序列Si,Si + 1,Si + 2,...,Sj-1,Sj中的不同字母的数量正好等于K.相同的字母被认为是相同的,不同的字母被视为不同。
S [i:j]表示序列Si,Si + 1,......,Sj-1,Sj
由于,K = 3
可能的对(i,j)使得S [i:j]中的不同字母的数量恰好等于K:
(1,3)和S [1:3] = abc
(1,4)和S [1:4] = abca
(1,5)和S [1:5] = abcaa
(2,4)和S [2:4] = bca
(2,5)和S [2:5] = bcaa
所以答案是5。
public class Coin {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int k=in.nextInt();
String str=in.next();
solve(str,k);
}
private static void solve(String str,Integer k) {
char[]ch=str.toCharArray();
Map<Integer, Character> mapchar = new LinkedHashMap();
for(int i=0;i<str.length();i++){
mapchar.put(i,ch[i]); //put the value of array index i and array value in mapchar i=keys ch[i]=values
}
int l=str.length(),count=1,i=0,store=0,j=1;
while(i<l && j<=l ){
if(mapchar.get(i)!=mapchar.get(j)){
count++;
if(count==k){
store++;
// count=0;
}
}
else{
if(count==k){
store++;
}
else{
count++;
}
}
if(j==l){
i++;
j=i+1;
count=0;
}
j++;
}
System.out.println(store);
}
}
在上面的代码中将是count(0或1)的初始值 {如果count的值是1那么a!= b然后a!= c所以count将是3然后它会增加存储... 但如果计数为0则其值为2且存储不会递增[有计数= 0有意义但有计数= 1没有意义]}
第二个错误是评论计数= 0(我不知道放在哪里) 因为如果它被评论那么
else{
if(count==k){
store++;
}
将起作用,abca将被计算在内,否则将不计算在内。(我不知道是否将它放在那里)。
第三,对于上述问题,哪一个更好的LinkedHashMap,HashMap或TreeMap。