Split String

27 篇文章 0 订阅
2 篇文章 0 订阅
Split String 

Give a string, you can choose to split the string after one character or two adjacent characters, and make the string to be composed of only one character or two characters. Output all possible results.

样例

Given the string "123"
return [["1","2","3"],["12","3"],["1","23"]]

       一看这个问题就知道要使用回溯法遍历所有的可能,这也使我盲目的套用课件上的代码模板,直接编程序导致出现了各种小错误。
       后来,经过仔细的思考按照回溯法的思路,找到了结束的条件,以及如何恢复现场。对于遍历时判断它是单独一个元素还是两个元素
就按照0,1规划问题的思路,分成两种情况就可以。
class Solution {
public:
    /*
     * @param : a string to be split
     * @return: all possible split string array
     */
    vector<vector<string>> a;
    vector<string>b;
    vector<vector<string>> splitString(string& s) {
        // write your code here
        if(s=="")
        {
            a.push_back(b);
            return a;
        }
        backtrack(0,0,s);
        if(s.size()>1)
        backtrack(1,1,s);
        return a;
    }
    void backtrack(int t,int n,string s)
    {
        if(t>=s.size())
        {
            return;
        }
        else{
            if(n==0)
            {
                string c="";
                c=c+s[t];
                b.push_back(c);//if(t>=s.size()-1)
                 a.push_back(b);t++;
                backtrack(t,0,s);t++;//这里之所以还需要加1是因为接下来要处理两个字母的情况
                backtrack(t,1,s);
                t=t-2;
                b.erase(b.end()-1);//恢复现场
            }
            if(n==1)
            {
                string c="";
                c=c+s[t-1]+s[t];
                b.push_back(c);//if(t>=s.size()-1)
                 a.push_back(b);t++;
                backtrack(t,0,s);t++;
                backtrack(t,1,s);
                t=t-2;
                b.erase(b.end()-1);//恢复现场
            }
        }
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值