\ # 데이터 구조 와 알고리즘 학습 노트 \ # 검 지 제공 42: 단어 순 서 를 뒤 집기 + 테스트 사례 (자바, C / C +)

2019.1.2     검 지 Offer 는 제로 브러시 개인 노트 정리 (66 문제 전) 디 렉 터 리 전송 문 에서
인터넷 에 서 는 원 서 를 포함 한 많은 방법 이 문장 을 두 번 뒤 집 는 것 이다. 첫 번 째 는 전체 문자열 을 뒤 집 고 두 번 째 는 빈 칸 을 간격 으로 모든 단 어 를 뒤 집 는 것 이다.자바 를 사용 하면 이렇게 번 거 롭 지 않 아 도 됩 니 다. split 를 이용 하여 빈 칸 으로 문자열 을 나 누 어 마지막 문자열 을 StringBuilder 로 바 꾸 고 뒤에서 계속 append 하면 됩 니 다.
제목 설명
영어 문장 을 입력 하고 문장 속 단어의 순 서 를 뒤 집 지만 단어 내 문자 의 순 서 는 변 하지 않 습 니 다.문장 부 호 는 일반 자모 와 동등 하 게 처리 된다.예 를 들 어 'student. a am I' 는 'I am a student' 를 출력 한다.
Java 구현:
/**
 * 
 * @author ChopinXBP
 *           。  ,“student. a am I”。
 */

public class ReverseSentence_42 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(ReverseSentence("I am a student."));
		System.out.println(ReverseSentence("  "));
	}

    public static String ReverseSentence(String str) {
        if(str == null || str == "")return "";
        if(str == " ")return " ";
        
        String[] strlist = str.split(" ");                                 
        int length = strlist.length - 1;
        if(length < 0)return "";
        StringBuilder newstr = new StringBuilder(strlist[length--]);
        while(length >= 0) {
        	newstr.append(" ").append(strlist[length--]);
        }
        
        return newstr.toString();
    }

}

C + + 구현 예시:
class Solution {
public:
    string ReverseSentence(string str) {
        auto size = str.size();
        if(size == 0) return "";
        int mark=0;
        str += ' ';
        for(int i = 0; i < size+1; ++i){
            if(str[i] == ' '){
                ReverseWord(str, mark, i-1);
                mark = i+1;
            }
        }
        str = str.substr(0, size);
        ReverseWord(str, 0, size-1);
        return str;
    }
    void ReverseWord (string &str, int l, int r){
        while(l < r){
            swap(str[l], str[r]);
            ++l;
            --r;
        }
    }
};

테스트 코드:
// ====================    ====================
void Test(char* testName, char* input, char* expectedResult)
{
    if(testName != NULL)
        printf("%s begins: ", testName);

    ReverseSentence(input);

    if((input == NULL && expectedResult == NULL)
        || (input != NULL && strcmp(input, expectedResult) == 0))
        printf("Passed.

"); else printf("Failed.

"); } // , void Test1() { char input[] = "I am a student."; char expected[] = "student. a am I"; Test("Test1", input, expected); } // , void Test2() { char input[] = "Wonderful"; char expected[] = "Wonderful"; Test("Test2", input, expected); } // void Test3() { Test("Test3", NULL, NULL); } // , void Test4() { Test("Test4", "", ""); } // , void Test5() { char input[] = " "; char expected[] = " "; Test("Test5", input, expected); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); Test2(); Test3(); Test4(); Test5(); return 0; }

\ # Coding 1 시간, Copying 1 초.메 시 지 를 남 겨 서 좋아요 를 눌 러 주세요. 감사합니다 \ #

좋은 웹페이지 즐겨찾기