飞范超神之作

解题思路:每次去掉目标字符串的末尾一个字符,这边要设置一个方向变量,这样就可以用双指针法来代替翻转字符串的操作,时间复杂度O(target.length())。

string canObtain(string src, string tar){
    if(src.length() > tar.length()) return "Impossible";
    int left = 0 , right = tar.length() - 1 ,front_to_end = 1;
    while(right - left + 1 != src.length()){
        if(front_to_end){
            if(tar[right] == 'A')right--;
            else {
                front_to_end = 0;
                right--;
            }
        }
        else {
            if(tar[left] == 'A')left++;
            else {
                front_to_end = 1;
                left++;
            }
        }
    }
    if(!front_to_end) reverse(src.begin(), src.end());
    return src == tar.substr(left, src.length()) ? "Possible" : "Impossible";
}

 

posted @ 2017-04-25 11:49  Tsunami_lj  阅读(145)  评论(0编辑  收藏  举报