一、算法说明
字符串是一种类型,他不是一种算法,所以我们在处理这方面的问题的时候,需要结合其他的算法
二、题目
最长公共前缀
1、题目
2、解题思路
解法一:我们可以先让两个相互比较,然后在将比较出来的公共前缀和下一个作比较
解法二:我们可以一次性比较所有的
3、代码实现
class Solution
{
public:
string longestCommonPrefix(vector<string>& strs)
{
string r = strs[0];
for(int i = 1; i<strs.size(); i++)
{
r = FindCommmon(r,strs[i]);
}
return r;
}
string FindCommmon(string& r, string& x)
{
int i = 0;
while(i < min(r.size(), x.size())&&r[i]==x[i])
{
i++;
}
return r.substr(0,i);
}
};
最长回文子串
(1)题目
(2)解题思路
中心扩展法:我们可以定义一个位子i,然后使用双指针,判断以i为中心的两侧是否相等,分为两种情况,一种是偶数对称即示例2,这是我们双指针的位置分别在 i,和i+1,如果是奇数对称,双指针的位置都在i
(3)代码实现
class Solution
{
public:
string longestPalindrome(string s)
{
int begin = 0, len = 0;
for (int i = 0; i < s.size(); i++)
{
int left = i;
int right = i;
while (left >=0 && right < s.size() && s[right] == s[left])
{
left--;
right++;
}
if (right - left - 1 > len)
{
begin = left + 1;
len = right - left - 1;
}
left = i ; right = i + 1;
while (left >=0 && right < s.size() && s[right] == s[left])
{
left--;
right++;
}
if (right - left - 1 > len)
{
begin = left + 1;
len = right - left - 1;
}
}
return s.substr(begin, len);
}
};
字符串相乘
(1)题目
(2)解题思路
解题思路一:
1、模拟字符串
添加一个字符串,上面的字符串挨个乘以下面的字符串里面的数字,得到结果后相加
2、高位相乘的时候,要补上0
我们可以先将字符串逆序,然后我们会发现下标为几,就在前面加上几个‘0’
3、逆序
等到结果后先全部相加在逆序
4、处理前导’0‘
如果我们乘以的是一个字符'0'只需要保存一个’0‘
解题思路二 :
(3)代码实现
class Solution
{
public:
string multiply(string num1, string num2)
{
string ret;
if(num1 == "0" || num2 == "0")
return "0";
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
for(int i = 0 ; i < num1.size(); i++)
{
string tmp;
int k = i;
while(k--)
{
tmp.push_back('0');
}
int add = 0;
for(int j = 0 ; j < num2.size() ; j++)
{
int re = ((num1[i] - '0')*(num2[j] - '0') + add) ;
add = re/10;
char s = re%10 + '0';
tmp.push_back(s);
}
if(add!=0)
{
tmp.push_back(add+'0');
}
ret = Addstring(tmp , ret);
}
reverse(ret.begin(),ret.end());
return ret;
}
string Addstring(string s1, string s2)
{
int i = 0, j = 0, add = 0;
string ans;
while (i < s1.size() || j < s2.size() || add > 0) {
int sum = add;
if (i < s1.size())
sum += s1[i++] - '0';
if (j < s2.size())
sum += s2[j++] - '0';
ans.push_back((sum % 10) + '0');
add = sum / 10;
}
return ans;
}
};