Leetcode典型題解答和分析、歸納和彙總——T151(翻轉字符串裏面的單詞)

問題描述:

給定一個字符串,逐個翻轉字符串裏面的單詞。

問題分析:

本題我們主要採用反轉的思路。

【1】定位到單詞左右兩邊的第一個非空字母上(left、right);

【2】採用反轉函數reverse將整個字符串所有字母調轉順序;

【3】然後對字符串中的逐個單詞進行逆序調整;

【4】最後去除掉字符串中多餘的空字符。

class Solution {
public:

   void  reverse(string &s, int l, int r)
   {
     while(l<=r)
	 {
		 char tmp =s[l];
		 s[l] = s[r];
		 s[r] = tmp;
		 ++l;
		 ++r;
	 }
   }

    string reverseWords(string s) {
		int left = 0, right =s.size()-1;
		while(s[left]==' ') ++left;
		while(s[right]==' ') ++right; //找到第一個出現空字符的左右位置

		reverse(s,left,right);  //進行字符串的左右端交換,全部反轉

		int begin = left, end = left, count =0; 
		while(begin<=right)  //對每一個單詞進行反轉
		{
			while(begin<=right && s[begin]==' ') ++begin;
			end = begin;

			while(end<=right&&s[end]!=' ') ++end;

			reverse(s,begin,end-1);
			begin = end;
		}
		
		for(int i=left; i<=right;i++)
		{
			if(s[i]==' '&&s[i-1]==' ')  //如果中間存在多個單詞空格,則只保留其中一個
			continue;
			s[count++] = s[i];
		}

		return s.substr(s,count);
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章