查找字符串中不同对的数量

时间:2016-11-14 06:33:22

标签: java distinct-values

假设有一个字符串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。

0 个答案:

没有答案