第四天——双指针

344.反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

public class Solution {
    public void ReverseString(char[] s) {

        int n = s.Length;
        int left = 0;
        int right = n-1;

        while(left <= right)
        {
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
        
    }
}

这道题思路比较简单,经过这几天双指针的洗礼

我相信大家应该都比较容易想到了

left从0开始,right从尾端开始

两两交换,交换完一轮之后当left和right重合就可以听了

奇数个和偶数个对这道题目没什么影响


557. 反转字符串中的单词 III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例:

输入:”Let’s take LeetCode contest”
输出:”s’teL ekat edoCteeL tsetnoc”

提示:

在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格

public class Solution {
    public string ReverseWords(string s) {
        string[] stringArray = s.Split(' ');
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < stringArray.Length; i++)
        {
            for (int j = stringArray[i].Length - 1; j >= 0; j--)
            {
                stringBuilder.Append(stringArray[i][j]);                 
            }
            stringBuilder.Append(" ");
        }
        stringBuilder.Remove(s.Length, 1);
        return stringBuilder.ToString();
    }
}

这题说实话我真不会

我满脑子都是C++直接把string当数组用的操作

后来是问了才知道有StringBuilder这样一个类

但是即便如此看完答案后我还是很迷

我自己想的算法也没写对

不知道哪里出了问题

建议参考大佬的思路 点击跳转

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注