문자열 S를 함수에 집어 넣으면 중복되는 부분문자 중에 가장 긴 부분문자를 리턴해라
ex) aaabcabcab => aaabcabcab =aaabcabcab 다음과 같이 가장 길은 부분문자열은 abcab이다
[출처] 2009/10/17 Daum C
oding Test |작성자 JunSu
String str = "aaabcabcab";
String str_temp = "";
int max = 1; //최대 문자열의 길이
/**
* aaabcabcab의 문자열에서 aa를 비교할경우 첫 문자 a를 제외한 aabcabcab 에서 비교한다.
* 비교할 첫 문자만 자르고 비교하면 해당 문자열에선 같은 문자가 비교에 의해서만 확인가능하다.
* i를 증가시키며 첫문자열만을 빼면서 하나씩 비교한다.
* 이는 문자열의 중복은 앞에 있다면 당연히 뒤에 있을 수밖에 없으며
* 뒤에서 자른 문자열은 원본의 앞 문자열과 비교할 필요가 없다는 것을 뜻한다.
* (있었다면 벌써 앞에서 비교가 있었다.)
* 이에 j를 i 시작점에서 증가 시켜서 차례대로 비교하고 최대 문자열의 길이만 판독하면 된다.
*
*/
for (int i = 0; i < str.length(); i++) {
for (int j = i; j < str.length(); j++) {
String str_div = str.substring(i, j+1); //문자열의 처음부터 차례대로 잘라나감.
String str_div2 = str.substring(i+1); //자른 문자열의 첫문자만 빼고 자름.
//System.out.println(str_div2.matches(".*"+str_div+".*") + " " + str_div + " " + str_div2);
//문자열 비교.
if(str_div2.matches(".*"+str_div+".*"))
//계산값중 가장 긴 문자열 이며 , 원본과 다를때.
if((max < str_div.length())&& (str_div.length() != str.length())){
max = str_div.length();
str_temp = str_div;
//System.out.println(str_temp);
}
}
}
System.out.println(max + " " + str_temp);
'뇌세포덩어리"" > 알고리즘' 카테고리의 다른 글
탐색 (선형 / 이진 / 이진트리) (0) | 2016.05.18 |
---|---|
정렬 알고리즘 ( 버블 / 선택 / 삽입 / 퀵) (0) | 2016.05.16 |
정수 뒤집기 알고리즘(1) (4) | 2011.05.10 |
유클리드 거리, 마할라노비스 거리 (9) | 2009.06.11 |
이해가안되는알고리즘..=-= (2) | 2008.05.08 |