• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

만약 문자열이 매칭되는 조건("arrest", "test")이 문자열의 인덱스 기준 뒤에서부터 발생하면 어떻게 풀어야할까요?

21.06.08 17:32 작성 조회수 279

2

만약 "arrest", "test" 처럼 두 개의 문자열 비교시 매칭되는 문자열이 "est"로 뒤에서부터 맞춰진다면 이런 경우는 어떻게 풀어야 할까요?

답변 1

답변을 작성해보세요.

1

DevAndy님 안녕하세요~

코딩 열심히 하시고 계신가요??

질문주신내용 : 만약 "arrest", "test" 처럼 두 개의 문자열 비교시 매칭되는 문자열이 "est"로 뒤에서부터 맞춰진다면 이런 경우는 어떻게 풀어야 할까요?

=======================================================

문자열의 마지막부터 읽는게 없어서 조작을 해야겠죠.

아래 2개의 경우를 생각하게 됩니다.

저는 1번을 선택합니다.

1. 뒤에서 읽는게 귀찮으니 , 최초에 받은걸 revers 하는 방법

문자열을 reverse에서 기존로직에 태우는방법

test => tset 이런식으로 

arrest => tserra

2. 문자열 length를 이용해서 마지막 문자부터 하나씩 잘라서 (substring 으로 )

새로운 StringBuilder에 하나씩 담아서 비교하기..좀 골치가 아플거 같네요 

1번 방법 소스입니다.

1번방법 소스입니다.

package String;

public class Test_charAt_03 {

public static void main(String[] args) {

// String str[] = { "test", "teacher" };

String str[] = { "test", "arrest" };

System.out.println(new Test_charAt_03().solve(str));

}

public String solve(String[] strs) {

if (strs.length == 0)

return "";

//1. reverse

String[] strArray = new String[strs.length];

for (int i = 0; i < strs.length; i++) {

String str = strs[i];

StringBuilder sb = new StringBuilder();

for (int j = str.length() - 1; j >= 0; j--) {

char c = str.charAt(j);

System.out.println("c " + c);

sb.append(c);

strArray[i] = sb.toString();

}

}

//2. 기존로직

String firstStr = strArray[0];

for (int i = 1; i < strArray.length; i++) {

while (strArray[i].indexOf(firstStr) != 0) {

firstStr = firstStr.substring(0, firstStr.length() - 1);// test, test, te

}

}

//3 얻은 값 다시 reverse

StringBuilder reStr = new StringBuilder();

for (int i = firstStr.length() - 1; i >= 0; i--) {

char c = firstStr.charAt(i);

reStr.append(c);

}

return reStr.toString();

}

}

}

DevAndy님의 프로필

DevAndy

질문자

2021.06.09

코드까지 이렇게 다 작성해주시다니..!

들어온 데이터를 reverse해서 기존 로직으로 검증을 하면 되는거였군요.

감사합니다!! 열심히 그리고 즐겁게 코딩하겠습니다..!