Hebilla 344. cuerda inversa
https://leetcode-cn.com/problems/reverse-string/
Escriba una función cuya función sea invertir la cadena de entrada. La cadena de entrada se proporciona como una matriz de caracteres char [].
No asigne espacio adicional a otra matriz, debe modificar la matriz de entrada en su lugar y usar O (1) espacio adicional para resolver este problema.
Puede suponer que todos los caracteres de la matriz son caracteres imprimibles en la tabla de códigos ASCII.
Método de doble puntero
Análisis de complejidad.
Complejidad del tiempo: O (N). Se realizaron intercambios N / 2N / 2.
Complejidad del espacio: O (1), solo se utiliza el espacio de nivel constante.
#include "stdafx.h"
#include<vector>
using namespace std;
class Solution {
public:
void reverseString(vector<char>& s)
{
//双指针法
int i = 0;
int j = s.size() - 1;
while (i<j)//首尾交换,直到i>=j
{
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
};
int main()
{
Solution str;
vector<char> s;
s.push_back('h'); s.push_back('e'); s.push_back('l'); s.push_back('l'); s.push_back('o');
vector<char> s1;
s1.push_back('H'); s1.push_back('a'); s1.push_back('n'); s1.push_back('n'); s1.push_back('a'); s1.push_back('h');
str.reverseString(s);
str.reverseString(s1);
return 0;
El método de doble puntero utiliza dos punteros, un puntero izquierdo a la izquierda y un puntero derecho a la derecha. Al comenzar a trabajar, la izquierda apunta al primer elemento y la derecha apunta al elemento de cola. Cambie los elementos señalados por los dos punteros y muévase hacia el centro hasta que los dos punteros se encuentren.
Algoritmo
Apunte a la izquierda al primer elemento y a la derecha al elemento final.
Cuando izquierda <derecha:
intercambie s [izquierda] ys [derecha].
izquierda ++
derecha ++