码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode--Valid PalindromeⅡ

时间:2017-10-29 14:35:07      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:一个   blog   bool   idp   选择   简单的   tin   复杂度   运行时   

  • 正常解法
 1 class Solution {
 2 public:
 3     bool reverse(string input)
 4     {
 5         string res="";
 6         for(int i=input.length()-1;i>=0;i--)
 7             res+=input[i];
 8         if(res==input)
 9             return true;
10         else 
11             return false;
12     }
13     bool validPalindrome(string s) {
14         if(reverse(s))
15             return true;
16         else
17         {
18             string copy;
19             string::iterator iter;
20             for(int i=0;i<s.length();i++)
21             {
22                 copy=s;
23                 iter=copy.begin();
24                 copy.erase(iter+i);
25                 //cout<<copy<<endl;
26                 if(reverse(copy))
27                     return true;
28                 
29             }
30             return false;
31         }
32         
33     }
34 };

以上是正常解法,但认真分析可以发现其复杂度是O(n^2),原因很简单,首先先逐个查找去掉某一个字符的字符串是不是回文序列,查找需要n次,同时字符串与reverse后字符串的比较的次数也为n次,由此可见算法复杂度是n^2,这在leetcode上运行时会出现严重的超时,故采取第二种简单的做法,可以实现O(n)复杂度。

  • 简单做法
class Solution {
public:
    bool validPalindrome(string s) {
    int i=0,j=s.length()-1;
    int track=0;
    int si,sj;
    while(i<j)
    {
        if(s[i]==s[j])
        {
            i++;
            j--;
            continue;
        }
        if(track==2)
        {
            return false;
        }   
        if(track==1)
        {
            track++;
            i=si;
            j=sj;
            j++;
        }  
        if(track==0)
        {
            track++;
            si=i;
            sj=j;
            i--;
        }

        i++;
        j--;
    }
    return true;   
    }
};

  定义两个标志i,j,一个从左边出发,一个从右边出发,一起对比遍历,期间有两个选择,可以向前退也可以向后面退,但只能一步,而且在判断语句中,一定要把track==2放在前面实现一个判断,不然后续判断就没有效果。

 

LeetCode--Valid PalindromeⅡ

标签:一个   blog   bool   idp   选择   简单的   tin   复杂度   运行时   

原文地址:http://www.cnblogs.com/xlqtlhx/p/7749903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!