题目描述
给你一个回文字符串s。
返回s的按字典序排列的最小回文排列。
如果一个字符串从前往后和从后往前读都相同,那么这个字符串是一个回文字符串。
排列是字符串中所有字符的重排。
如果字符串a按字典序小于字符串b,则表示在第一个不同的位置,a中的字符比b中的对应字符在字母表中更靠前。
如果在前min(a.length, b.length)个字符中没有区别,则较短的字符串按字典序更小。
示例 1:
输入:
s = "z"输出:
"z"解释:
仅由一个字符组成的字符串已经是按字典序最小的回文。
示例 2:
输入:
s = "babab"输出:
"abbba"解释:
通过重排
"babab"→"abbba",可以得到按字典序最小的回文。
示例 3:
输入:
s = "daccad"输出:
"acddca"解释:
通过重排
"daccad"→"acddca",可以得到按字典序最小的回文。
提示:
1 <= s.length <= 10^5s由小写英文字母组成。- 保证
s是回文字符串。
苯人思路
classSolution{public:stringsmallestPalindrome(string s){intn=s.size();string half="";for(inti=0;i<n/2;i++)half.push_back(s[i]);sort(half.begin(),half.end());stringhalf_reverse(half.rbegin(),half.rend());string answer="";if(n%2==0)answer=half+half_reverse;elseanswer=half+s[n/2]+half_reverse;returnanswer;}};学习笔记
C++ 中简单快速实现字符串(std::string)倒序:
① 使用std::reverse
需要头文件
<algorithm>
string str="Hello World";reverse(str.begin(),str.end());// 可直接使字符串倒序② 使用反向迭代器构造新字符串
不修改原字符串,直接创建一个倒序的新字符串
反向迭代器:rbegin(),rend()
正向迭代器:begin(),end()
string str="Hello World";stringreversed(str.rbegin(),str.rend());