2011-03-22 26 views
7

对于这个问题,在一个串中的“一对”被定义为其中一个字符的两个实例被另一个字符分隔的情况。所以在“AxA”中,A是一对。对可以重叠,所以“AxAxA”包含三对;两个用于A和一个用于x。我怎么能指望在一个字符串的简单模式的出现的次数?

进一步的实例:

countPairs( “AXA”)→1个
countPairs( “axax”)→2个
countPairs( “axbx”)→1

我被要求如何在昨天的采访中计算给定字符串中对的数量,我不知道该怎么做。

+0

太糟糕我有一些工作要做: - /。这是一个非常有趣的问题。 – helpermethod 2011-03-22 15:47:56

+0

@Helper Method.i没有得到you.where你指指点点,我无法去解决它。 – Deepak 2011-03-22 15:54:24

回答

10

O(n)解决方案是迭代字符串(从0到length-2)和(使用charAt(..))来验证当前字符是否等于current+2。如果是这样,递增pairsCount变量

int pairsCount = 0; 
for (int i = 0; i < str.length() - 2; i ++) { 
    if (str.charAt(i) == str.charAt(i + 2)) { 
     pairsCount ++; 
    } 
} 
+0

我可以有逻辑例如please.Im坚持了这一点,因为早上。 – Deepak 2011-03-22 15:42:14

+0

+1,这也是我的第一个想法。 – Pops 2011-03-22 15:42:35

+0

@Deepak - 只是增加了一些代码 – Bozho 2011-03-22 15:42:57

3

以前awser不隐蔽事实,即在中间(分隔符)的卡拉科特必须是不同的。

对于这个问题,在一个串中的“一对”被定义为其中一个字符的两个实例被另一个字符分离的情况。所以在“AxA”中,A是一对。对可以重叠,所以“AxAxA”包含三对;两个用于A和一个用于x。

必须将此角色有所不同? 在这里,我虽然如果它必须是不同的...

int trueNbPair =0; 
    for (int i=1;i<str.length()-1;i++) 
    { 
     char prev = str.charAt(i-1); 
     char current = str.charAt(i); 
     char next = str.charAt(i+1); 

     if (prev == next && current!= prev) 
     { 
      trueNbPair++; 
     } 
    } 
+0

好抓。我认为AAA也被认为是一对。但它可能是相反的。 – Bozho 2011-03-22 20:40:38

相关问题