/**
* [문자열회전]
* 한 단어가 다른 문자열에 포함되어 있는지 판변하는 isSubString이라는 메서드가 있다고 가정
* s1과 s2의 두 문자열이 주어졌고, s2가 s1을 회전시킨 결과인지 판별하고자함
* 가령 waterbottle은 erbottlewat을 회전시켜서 얻을 수 있는 문자열
* isSubString 메소드를 한번만 호출해서 판별하는 코드를 작성 ( 한번만 잘라서 같은 문자열이 되는지 )
*
*[풀이]
* => 회전이란 의미를 명확히
* => [방법1] 두번의 패턴을 비교하는 방법
* => [방법2] 1번의 회전으로 같아진다면 문자열에 마지막에 갔을때 다시 처음으로 가면 문자열이 이어짐
* */
public class Q09 {
/* main */
public static void main(String[] args) {
System.out.println(isRotateString("waterbottle", "erbottlewat")); // true
System.out.println(isRotateString("waterbottla", "waterbottle")); // false
}
/* isRotateString */
static boolean isRotateString(String strA, String strB) {
if(strA.length() != strB.length()) return false;
int startB = 0;
int pointerA = 0;
int pointerB = 0;
while(startB != strB.length() && pointerA != strA.length()) {
if(strA.charAt(pointerA) == strB.charAt(pointerB)) {
pointerA++;
pointerB++;
if(pointerB >= strB.length()) pointerB = 0; // == 순환 ==
} else {
pointerA = 0;
pointerB = ++startB;
}
}
return pointerA == strA.length() ? true : false;
}
}
반응형
'CS > 자료구조 문제' 카테고리의 다른 글
문제 // 자료구조 //리스트(List) // 중복제거 // toJava (0) | 2018.08.14 |
---|---|
문제 // 자료구조 // 배열(Array) // 행렬회전 // toJava (0) | 2018.08.03 |
문제 // 자료구조 // 배열(Array) // 0행렬 // toJava (0) | 2018.08.03 |
문제 // 자료구조 // 문자열(String) // 문자열압축 // toJava (0) | 2018.08.03 |
문제 // 자료구조 // 문자열(String) // 유사문자열검증 // toJava (0) | 2018.08.03 |