LeetCode:917.仅仅反转字母

解题想法:

  • 前后指针,前指针往后,后指针往前,都是字母时反转,不是字母是往里走,俩指针重合,遍历结束。没想法了
  • 哈希表,int: string(字母),。。。。好像也需要用双指针。。。不好。

代码:

出错:

  1. 超时
    class Solution {
    public:
        string reverseOnlyLetters(string s) {
            int n = s.size();
            int l = 0, r = n-1;
            while (true) {
                while (l

    原因:交换之后没加l++和r--,导致交换后再一次前面俩个依旧满足俩个while循环,程序一直停在这里就行交换,死循环。

  2. 修改之后依旧有问题,给出的答案和与其答案差别很大,仔细观察发现第三个while里,
    !的位置写错了,修改之后直接报错,LeetCode:917.仅仅反转字母_第1张图片查了资料发现时数组下标出现了-1
  3. 又看了题解,重新发现了问题所在,对于跳出循环的条件,俺写了l==r,我仔细模拟过最后一次交换之后l、r之间有无字母的情况发现都是可以的,觉得没有问题,最后看了出现问题的案例,发现自己在模拟的时候,忘记了交换之后l++和r--。即第一次问题的遗留。。。。当最后一次交换的俩个字母相邻时,l++和r--,会导致l>r,前后指针会一直走,导致数组下表出现了-1的情况引起报错。

 正答:

class Solution {
public:
    string reverseOnlyLetters(string s) {
        int n = s.size();
        int l = 0, r = n-1;
        while (true) {
            while (l=r) {
                return s;
            } else {
                swap(s[l], s[r]);
            }
            l++;
            r--;
        }
        
    }
};

你可能感兴趣的:(#,力扣,leetcode,算法,职场和发展)