2014-09-19 2 views
-3

문자열을 aabc로 가정하십시오. 이제 문자를 문자열로 순환 방식으로 이동해야합니다.자바 문자열의 문자를 계속 추적하십시오.

aabc--->abca-->bcaa-->caab 

이제 첫 번째 문자 a가 두 번째 위치로 이동했음을 알 수 있습니다. 문제는 문자열이 무한대로 회전 할 수 있다는 것입니다. 시간의하지만 첫 번째 문자를 추적해야합니다.

int headPosition(int numberOfRotate, String val){ 
    numberOfRotate %= val.length(); 
    int pos = (val.length() - numberOfRotate)% val.length();  
    return pos; 
} 

기능 headPosition이 numberOfRotate 회전 후 문자열의 첫 번째 문자를 반환합니다 가이

+0

"첫 번째 문자를 추적해야합니까?"라는 것은 무엇을 의미합니까? –

+0

예제에서 첫 번째 문자는 문자열에서 문자 원형 방식을 회전 한 후입니다. 주어진 첫 번째 캐릭터의 위치를 ​​찾아야합니다. 나는 그것을 할 수 있는지를 묻는 중이다. – Roshan

+1

회전 한 횟수를 알고 있다면 그렇다. 그렇지 않으면, 번호 – TheLostMind

답변

3

문제는 문자열을 무한대로 회전 할 수 있다는 것입니다. 시간의하지만 첫 번째 문자를 추적해야합니다. 이것을 할 수있는 방법이 있습니까?

일반적으로 아니오.

문자열 "XXXX"을 고려하십시오. 이 문자열의 가능한 회전 차이를 알 수있는 방법은 없습니다. 따라서 원래 문자열의 첫 번째 문자가있는 위치를 "추적"할 수 없습니다.

또한이 문자열은 "abcd"입니다. 문자열을 회전하여 도달 할 수있는 상태는 네 가지가 있지만 회전 수가 무한합니다. 첫 번째 캐릭터 ('a')를 "추적"할 수 있습니다 ... str.indexOf("a") ...로 전화를 걸 수 있습니다. 그러나 얼마나 많은 회전이 수행되었는지는 알려주지 않습니다. ('a'의 마지막 위치는 총 회전 모듈러스가 문자열의 길이를 알려주지 만 전체 회전 또는 개별 회전 시퀀스를 알 수는 없습니다.)

+0

예 즉 나는 – Roshan

+0

@Stephen 그래서 우리는 결론을 내릴 수 수 없습니다 생각 problem.So 만 회전의 임의의 숫자 후 초기 문자열 및 문자열을 알고함으로써, 회전의 모든 상태가 뚜렷한 경우에만 첫 번째 문자의 인덱스를 찾을 수 있습니다. 맞습니까? – DeiAndrei

+0

음 ..... 예. –

1

당신은 그것을

코드 할 수있는 간단한 계수 작업을 사용할 수 있습니다 할 수있는 방법입니다.

: 회전 수에 대해 모르고, 내가 입력 문자열 aaaa 인 경우, 예를 들어,이 문제를 해결할 수 있다고 생각하지 않습니다, 그래서 우리는 첫 번째 문자 인 인식 할 수 없습니다.

+0

을 요청하는 동안 염두에 두어야 할 수 있도록 나를 ... downvote 이유를 알려 주시기 바랍니다 것을 요청했다. 의 회전이 1.Which이 코드 내가 볼 – Roshan

+0

@Roshanjha에 따라 충족되지되는 3, 첫 번째 문자의 위치이기 때문에 회전이 왼쪽으로 회전, 내 코드를 업데이트됩니다 :) – Phoebe

+0

은 그것을 모르고 찾을 수 있습니다 아니. 이동 – Roshan

0

Without knowing the number of rotations 별도의 배열에 원래 색인을 유지하고 same shift to the indices array too을 수행하십시오.

x을 입력 문자열로하고 arr을 인덱스 array으로합시다.

int[] arr = new int[x.length()]; 

// fill the array with the indices. 
for (int i=0;i<x.length();i++) 
{ 
    arr[i] = i; 
} 
// for every move towards right, shift the elements in the array once towards right 
int last = arr[arr.length-1]; 
System.arraycopy(arr, 0, arr, 1, arr.length-1); 
arr[0] = last; 

// for every move towards left, shift the elements in the array once towards left 
int first = arr[0]; 
System.arraycopy(arr, 1, arr, 0, arr.length-1); 
arr[arr.length-1 ] = first; 


// Once all the iterations are done, the indices array will hold the original position 
// of the elements in tact. 

for (int i=0;i<arr.length;i++) 
{ 
    System.out.println("original index is: "+ arr[i]+" of "+ x.charAt(arr[i])); 
} 
관련 문제