一、算法說明
字符串是一種類型,他不是一種算法,所以我們在處理這方面的問題的時候,需要結合其他的算法
二、題目
最長公共前綴
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;}
};