1. 程式人生 > >【死磕演算法·字串問題】字串單詞間逆序

【死磕演算法·字串問題】字串單詞間逆序

題目大意:

給定字串表示的句子,在單詞間做逆序調整。單詞內部字元次序不變。

如“cat loves dog” 變化結果為“dog loves cat”

思路:
1、實現字串內部任意區間內所有字元逆序的函式f

2、用f處理整個字串為“god sevol tac”

3、找到逆序大字串中每一個單詞的區域,通過f對每一個單詞逆序處理為“dog loves cat”

程式碼實現:

class Reverse {
public:
   
    void reverseInterval(string &A,int i,int j){//i,j 代表待逆序序列兩邊的index,注意這裡要用到引用傳遞
        while(i<j){
            char temp = A[i];
            A[i] = A[j];
            A[j] = temp;
            i++;
            j--;
        }
    }
    string reverseSentence(string A, int n) {
        // write code here
        reverseInterval(A,0,n-1);
        int left = 0,right = 0,index = 0;
        while(index<n){
            while(index < n && A[index]==' ')//用“ ”雙引號表示是錯誤的
                index++;
            left = index;
            while(index < n && A[index]!= ' ')
                index++;
            right = index-1;
            if(left<=right)
                reverseInterval(A,left,right);
        }
          return A;
        }
};

自己踩坑的幾個點:

1、字元之間比較空格符要表示為‘ ’而不是“ ”,即用單引號括起來。

2、在子串逆序時,字串引用傳遞。實參應該是 string &A。

3、在字串中遍歷找單詞區間時,注意對當前index進行越界判斷,防止陣列越界。