本篇文章记录在leetcode中String主题下面的题目和自己的思考以及优化过程,具体内容层次按照{题目,分析,初解,初解结果,优化解,优化解结果,反思}的格式来记录,供日后复习和反思[注:有些题目的解法比较单一,就没有优化过程]。题目的顺序按照leetcode给出的题目顺序,有些题目在并不是按照题目本身序号顺序排列的,也不是严格按照难易程度来排列的。
因此,这篇文章并不具有很强的归类总结性,归类总结性知识将会在其他文章记录,本篇重点在记录解题过程中的思路,希望能对自己有所启发。
class Solution {
public:
string longestPalindrome(string s) {
if(s.size() <= 1)
return s;
string res ="";
int length = 0;
for(int i = 0; i < s.size(); ++i)
{
if((s.size() - i) < length)
break;
for(int j = s.size() - 1; j > i; --j)
{
int tmp_length = j - i + 1;
if(tmp_length < length)
break;
if(s[i] == s[j])
{
int start = i, end = j;
while(start < end)
{
if(s[++start]!=s[--end])
break;
}
if(start >= end)
{
res = s.substr(i,tmp_length);
length = tmp_length;
break;
}
}
}
}
if(res == "")
res = s[0];
return res;
}
};
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 1)
return s;
vector<string> res(numRows,"");
int group_length = numRows + numRows - 2;
for(int rows = 0; rows < numRows; ++rows)
{
int revise = 0;
if(rows > 0 || rows < numRows-1)
revise = rows;
for(int i = 0; i < s.size(); ++i)
{
if(((i+revise)%group_length)==0 || ((i-revise)%group_length)==0)
res[rows]+=s[i];
}
}
string total = "";
for(auto iter:res)
total+=iter;
return total;
}
};
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 1 || s.size()<=1)
return s;
vector<string> res(numRows,"");
int row=0, step=1;
for(int i=0; i < s.size(); ++i)
{
res[row]+=s[i];
if (row == 0)
step = 1;
else if (row == numRows - 1)
step = -1;
row += step;
}
string total = "";
for(auto iter:res)
total+=iter;
return total;
}
};