Coding Test/LeetCode

[LeetCode] 557. Reverse Words in a String III c++

owls 2022. 12. 26. 17:59
728x90
  • 문제

Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

Input: s = "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

 

문장에 있는 각 단어의 순서를 반대로 바꾸는 문제입니다.

 

  • 문제 해결
class Solution {
private:
    void parseString(string& str, vector<string>& vec, const string& delimiter){
        
        int pos = 0;
        while( (pos = str.find(delimiter)) != string::npos ){
            
            string tmp = str.substr(0, pos);
            vec.push_back(tmp);
            str.erase(0, pos + delimiter.length());
        }
        vec.push_back(str);
        
    }
public:
    string reverseWords(string s) {
        
        vector<string> vec;
        string delimiter(" ");
        parseString(s, vec, delimiter);
        
        string result("");
        for(const auto& it : vec){
            
            string tmp = it;
            int i = 0, j = it.size() -1;
            while( i < j){
                swap(tmp[i++], tmp[j--]);    
            }
            result += tmp + " ";
        }
        result.erase(result.size()-1);
        return result;
    }
};

 

 

다른 풀이

class Solution {
public:
    string reverseWords(string s) {
        
        int i = 0;
        for(int j = 0; j < s.size(); ++j){
            
            if( s[j] == ' '){
                reverse(s.begin() + i, s.begin() + j);
                i = j + 1;
            }
        }
        reverse(s.begin() + i, s.end());
        return s;
    }
};
728x90