【死磕演算法·字串問題】字串單詞間逆序
阿新 • • 發佈:2018-12-16
題目大意:
給定字串表示的句子,在單詞間做逆序調整。單詞內部字元次序不變。
如“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進行越界判斷,防止陣列越界。