Content
344. Reverse String
Description
Analysis & Solution
链表的反转,最简单的方法是双指针。一个指向链表头,一个指向尾节点,都向中间移动,每个位置两个指针元素值交换,直到两指针相遇。
Code
void reverseString(vector<char>& s)
{
int f = 0, b = s.size() - 1;
while(f < b)
{
char temp = s[f];
s[f] = s[b];
s[b] = temp;
f++;
b--;
}
}
时间复杂度为 O ( n ) O(n) O(n)。
557. Reverse Words in a String III
Description
Analysis & Solution
和上一题相同的思路,不过这里要先遍历,找到某一个单词的头位置和尾位置(通过判断是否是空格),然后对每个单词用双指针法进行反转。
Code
string reverseWords(string s)
{
int len = s.length();
int i = 0;
while(i < len)
{
int start = i;
while(i < len && s[i] != ' ') i++;
int left = start, right = i - 1;
while(left < right)
{
swap(s[left], s[right]);
left++;
right--;
}
while(i < len && s[i] == ' ') i++;
}
return s;
}
时间复杂度为 O ( n ) O(n) O(n)。