回文字符串问题

题目

647. Palindromic Substrings

解法

1、对于原先长度为N的数组ss,我们构造一个虚拟数据vss(并非真是存在,不占用存储空间),改数据长度为2N-1,构造方法如下图所示。
2、构造数据中蓝色方框表示虚拟数,其坐标无法被2整除。而真实数的坐标都是2的整数倍。

数组重构

3、设置两个指针sten,分别表示回文字符串的起始和结束坐标,且始终指向真实值。指针在初始状态位置相同。
4、遍历构造数据,当初始状态位于虚拟数位置时,修正st,en的位置使其指向真实值。随后在原数组中进行滑动,更新st,en,若ss[st]==ss[en],则表示新增回文,否则迭代结束,读取构造数据下一个数据。

    def countSubstrings(self, s: str) -> int:
        res = 0
        for i in range(2*len(s)):
            if i%2!=0:
                st = int(i/2)
                en = st + 1
            else: st = en = int(i/2)
            while st>=0 and en<len(s):                
                    if s[st]==s[en]:
                        res, st, en = res+1, st-1, en+1
                    else: break
        return res
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • DP问题求解(三)回文字符串问题 所谓回文字符串,Palindromic Substring,指正序和倒序相同的字...
    yuruilee阅读 1,275评论 0 0
  • pragma mark - - 栈 排序 /*回文数:左右对称的数即为回文数,例如:ahcha是回文数,acca ...
    maskerII阅读 487评论 0 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,633评论 0 17
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,426评论 0 2
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,159评论 1 32