【死磕算法·字符串问题】字符串单词间逆序

题目大意:

给定字符串表示的句子,在单词间做逆序调整。单词内部字符次序不变。

如“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进行越界判断,防止数组越界。

猜你喜欢

转载自blog.csdn.net/gulaixiangjuejue/article/details/85011476