LeetCode練習-字串

來源:互聯網
上載者:User


一、palindrome-partitioning

題目描述
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s ="aab",
Return
  [
    ["aa","b"],
    ["a","a","b"]
  ]

思路:動態規劃+深度優先遍曆(DFS)

1、用動態規範演算法劃分子迴文串

2、用DFS遍曆可能的情況

代碼:

class Solution {public:    vector<vector<string> > partition(string s){        vector<vector<string> > result;        vector<string> array;        if(s.length()==0)            return result;        vector<vector<bool> > flag = dp(s);        dfs(s, 0, flag, array, result);        return result;    }    void dfs(string s, int begin, vector<vector<bool> > flag, vector<string> array, vector<vector<string> > &result) {          if(begin==s.length()) {            result.push_back(array);             //array.clear();            return;          }          for(int i=begin;i<s.length();++i) {              if(flag[begin][i]==1) {                  vector<string> temp(array);                temp.push_back(s.substr(begin,i+1-begin));                //cout << "begin=" << begin << "; i+1=" << (i+1) << endl;                //cout << array.back() << endl;                dfs(s, i+1, flag, temp, result);              }          }      }    vector<vector<bool> > dp(string s){        int len = s.length();        vector<vector<bool> > flag(len, vector<bool>(len, 0));        int i, j;        for(i=len-1; i>=0; --i){            for(j=i; j<len; ++j){                if(j == i)                    flag[i][j] = true;                else{                    if(s[i] == s[j] && (j == i+1 || flag[i+1][j-1] == true)){                        flag[i][j] = true;                    }                }            }        }        return flag;    }};

本地測試代碼:

vector<vector<bool> > dp(string s);//動態規劃,劃分子串void dfs(string s, int begin, vector<vector<bool> > flag, vector<string> array, vector<vector<string> > &result);//深度優先遍曆vector<vector<string> > partition(string s);int main(){string s = "abcbad";//cout << s.substr(1, 2) << endl;vector<vector<bool> > flag = dp(s);int i, j;for(i=0; i<flag.size(); ++i){//列印flagfor(j=0; j<flag[i].size(); ++j)cout << flag[i][j] << ' ';cout << endl;}//vector<vector<string> > result;//vector<string> array;//dfs(s, 0, flag, array, result);vector<vector<string> > result = partition(s);for(i=0; i<result.size(); ++i){for(j=0; j<result[i].size(); ++j){cout << result[i][j] << ' ';}cout << endl;}return 0;}

二、add-binary

題目描述
Given two binary strings, return their sum (also a binary string).
For example,
a ="11"
b ="1"
Return"100"


代碼:

class Solution {public:    string addBinary(string a, string b) {        string sum;//輸出        int up=0;//進位        int i=a.length()-1;        int j=b.length()-1;        while(i>=0 && j>=0){            int temp = a[i]+b[j]-'0'-'0' + up;//當前位上 數位和            if(temp == 3){                up = 1;                sum.insert(sum.begin(), '1');            }            else if(temp == 2){                up = 1;                sum.insert(sum.begin(), '0');            }            else if(temp == 1){                up = 0;                sum.insert(sum.begin(), '1');            }            else if(temp == 0){                up = 0;                sum.insert(sum.begin(), '0');            }            --i;            --j;        }        while(i>=0){//此時如果i>=0,說明a長,對a餘下的位元進行操作            int temp = a[i] - '0' +up;             if(temp == 2){                up = 1;                sum.insert(sum.begin(), '0');            }            else if(temp == 1){                up = 0;                sum.insert(sum.begin(), '1');            }            else if(temp == 0){                up = 0;                sum.insert(sum.begin(), '0');            }            --i;        }        while(j>=0){//此時如果j>=0,說明b長,對b餘下的位元進行操作            int temp = b[j] - '0' + up;            if(temp == 2){                up = 1;                sum.insert(sum.begin(), '0');            }            else if(temp == 1){                up = 0;                sum.insert(sum.begin(), '1');            }            else if(temp == 0){                up = 0;                sum.insert(sum.begin(), '0');            }            --j;        }        if(up == 1)//判斷最高位是否有進位            sum.insert(sum.begin(), '1');        return sum;    }};

本地測試代碼:

int main(){string a;string b;cout << "a: ";getline(cin, a);cout << "b: ";getline(cin, b);string s = addBinary(a, b);//string s = "ss";cout << s << endl;return 0;}








聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.