字符串(1)--反转字符串

451 阅读1分钟

描述:编写一个迭代程序来反转一个迭代的字符串

例如:

  • 输入:Protons are zero and neutrons are one

  • 输出:eno era snortuen dna orez era Protons

参考方法:

方案(1)

使用简单的方法是在C ++ 中使用c或std :: reverse()函数。

c++版

// reverse 指定范围内的元素反序排序
void reverse(string&str)
{
    reverse(str.begin(),str.end());
}
int main()
{

    string str="Protons are zero and neutrons are one";
    cout<<"正序排列结果是 : "<<str<<endl;

    reverse(str);

    cout<<"反序后的结果是 : "<<str<<endl;

    return 0;
}

方案(2)

使用数据结构中的栈结构,我们将每个字符压入栈,然后再把每个字符弹出,直到栈为空位置。

C++版
void reverse(string&str,unsigned long n)
{
    // 创造一个空栈
    stack<char> st;
    // 将每个字符压栈
    for(int i=0;i<n;i++)
        st.push(str[i]);
    //从0开始
    int k=0;
    // 弹出字符直到栈空
    while(!st.empty()){
        str[k++]=st.top();
        st.pop();
    }
}

int main()
{
    string str="Protons are zero and neutrons are one";
    cout<<"正序排列结果是 : "<<str<<endl;
    reverse(str,str.length());
    cout<<"反序后的结果是 : "<<str<<endl;
    return 0;
}

方案(3)

使用栈结构它的时间复杂度O(n),空间复杂度O(n),如果要求空间复杂度O(1)呢?我们该怎么办?

c++版
void reverse(string&str)
{
    // 设置开始和结束的点
    unsigned long begin=0;
    unsigned long end=str.length()-1;

    while(begin<end)
        swap(str[begin++],str[end--]);
}

int main()
{
    string str="Protons are zero and neutrons are one";
    reverse(str);
    cout<<""<<str<<endl;
    return 0;
}

你的参与是我更大的动力!