2011-03-22 6 views
7

이 질문의 경우 문자열의 "쌍"은 한 문자의 두 인스턴스가 다른 문자로 구분되는 상황으로 정의됩니다. 따라서 "AxA"에서 A가 쌍을 이룹니다. 쌍이 겹칠 수 있으므로 "AxAxA"에는 세 쌍이 포함됩니다. A는 2, x는 하나.문자열에서 간단한 패턴의 발생 횟수는 어떻게 계산합니까?

또 다른 예 : 1

→ 2
countPairs ("axbx") → 1
countPairs ("axax") →

countPairs ("AXA")는 내가 질문을 받았다 방법 어제 인터뷰에서 주어진 문자열의 쌍의 수를 계산하고, 어떻게해야하는지 잘 모르겠습니다.

+0

너무 나쁘게해야 할 일이 있습니다. - /. 꽤 흥미로운 질문입니다. – helpermethod

+0

@Helper Method.i는 당신을 못 찾았습니다. 당신이 내가 그것을 풀 수 없다는 것을 지적했습니다. – Deepak

답변

10

오 (N) 솔루션은 현재 문자가 current+2 같은지 여부를 확인하는 문자열 (행 0 length-2) 및 (charAt(..) 사용)을 반복 할 것이다. 이 경우, 중간 (분리)에서 caracter이 달라야한다는 사실을 은밀한하지 않는 pairsCount 변수

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

나는 논리 예제를 부탁드립니다. 아침 이래로 이것으로 붙어 있습니다. – Deepak

+0

+1, 내 생각도 처음이었습니다. – Pops

+0

@Deepak - 일부 코드를 추가했습니다. – Bozho

3

이전 awser를 증가. 이 질문에 대한

는 문자열에서 "쌍" 한 문자의 두 인스턴스는 다른 문자에 의해 분리되는 상태로 정의된다. 따라서 "AxA"에서 A가 쌍을 이룹니다. 쌍이 겹칠 수 있으므로 "AxAxA"에는 세 쌍이 포함됩니다. A는 2, 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

관련 문제