ANAGRAM 문제를 풀고있는데 좀 막히네요

  • loveljh
    loveljh

    문제는 이거입니다.ANAGRAM

    while(testCase--){
    
            string str1,str2;
    
            cin>> str1 >> str2;
            if(str1 == str2)            //같은 문자열은 안되니 No.출력
                cout<<"No."<<endl;
            else
            //아닌경우에는 비교 
                isAnagram(str1,str2);
        }
    
        return 0;
    }
    
    void isAnagram(string& str1, string& str2){
    
        // str1 제일 처음꺼와 str2전체를 비교
        while(str1.size() != 0){
            // 예외 :) str1과 str2의 크기가 다르면 No.출력
            if(str1.size() != str2.size() ){
                cout<<"No."<<endl;
                break;
            }
    
            for(int j=0; j<str2.size(); ++j){
                // 만약 같은게 있으면 지움.
                if(str1[0] == str2[j]){
                    str1.erase(str1.begin());
                    str2.erase(str2.begin()+j);
                    break;
                }
                // str2 끝까지 돌았는데 없으면 str1처음것을 지움
                if( j == str2.size()-1 ) str1.erase(str1.begin());
            }
        }
        // str1의 크기가 0이되면 Yes출력 
        if(str1.size() == 0 ) cout<<"Yes"<<endl;
    
    }
    

    정렬하여 비교할수도 있었지만 다른방법으로 풀어보고 싶어서 이런식으로 풀었는데 막혀버렸네요.
    어디가 문제인걸까요?.. 도와주세요


    10년 전
2개의 댓글이 있습니다.
  • Being
    Being

    str1이 한 글자 뿐일 때 문제가 될 것 같습니다.


    10년 전 link
  • loveljh
    loveljh

    아...; 그러네요 그부분을 잡아야되겠네요
    순간 생각지도못한 예외가 있었네요 ㅠ 감사합니다 ^^


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.