首页 > 其他分享 >day18

day18

时间:2022-11-15 18:13:48浏览次数:45  
标签:getNext string int next ++ day18 size

【0459.重复的子字符串】

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        for (int i = 0; i < s.size()/2; i++) {
            int k = i + 1;
            for (int j = 0; j < k; j++) {
                if (s[j] != s[k]) {
                    break;
                }
                k++;
            }
        }
    }
};
  • 本来没思路 看了暴力解法的思路 有了想法 但代码还是写不出来
class Solution {
public:
    void getNext(int *next, string s) {
        int j = 0;
        int next[0] = 0;
        for (int i = 1; i < s.size(); i++) {
            while (s[j] != s[i]) {
                j = next[j - 1];
            }
            if (s[j] == s[i]) {
                j++;
            }
            next[i] = j;
        }
    }
    bool repeatedSubstringPattern(string s) {
        int next[s.size()];
        getNext(next, s);
        
};
  • 看了KMP方法 只能自己写出来这么多
class Solution {
public:
    void getNext(int *next, string s) {
        int j = 0;
        next[0] = 0;
        for (int i = 1; i < s.size(); i++) {
            while (j > 0 && s[j] != s[i]) {
                j = next[j - 1];
            }
            if (s[j] == s[i]) {
                j++;
            }
            next[i] = j;
        }
    }
    bool repeatedSubstringPattern(string s) {
        int next[s.size()];
        getNext(next, s);
        int len = s.size();
        if (next[len - 1] != 0 && len % (len - (next[len - 1] )) == 0) {
            return true;
        }
        return false;
    }
};
  • getNext函数 也就是获得前缀表next的函数 虽然思路理解 但代码有的地方一知半解 尤其是遇到了两个错误
    • 关于next数组:
      • 主函数中定义+调用int next[s.size()]; getNext(next, s);
      • 子函数头部+初始化void getNext(int *next, string s) {其他语句; next[0] = 0; 其他语句;}
    • 关于边界溢出
      • while (j > 0 && s[j] != s[i]) 这句话要加上j > 0这个条件
  • 主函数中 那个if判断句
    • 为什么next数组 最后一个元素值 不能取0 因为后面的取余数学运算不允许除数为0
    • 从代码 倒退原因 我看懂了 但是自己写 是写不出来的 总之还是不太理解 需要再看看

标签:getNext,string,int,next,++,day18,size
From: https://www.cnblogs.com/deservee/p/16893395.html

相关文章

  • 代码随想录Day18
    LeetCode226 翻转二叉树  思路:遍历节点,交换左右孩子的顺序即可。前序遍历(中左右)、后序遍历(左右中)都可以,中序遍历这样写就行不通,会做多余的翻转操作。遍历的写法:1......
  • day18 批量查询与模糊查询 & 聚合函数与内置函数 & distinct关键字 & 分页查询limit &
    day18两个表student和userstudentids_names_ages_sexuseridu_nameu_ageu_sex批量插入insertintostudents_names_sexselectu_name,u_sexfromuser;//......
  • day18面向对象
    概述:面向对象是一种编程思想(oop),是对面向过程的一个抽取和简化。主要是以类构建对象,来存储对应的行为及属性,将抽取的行为作为方法,对应的属性为属性,所有内容都可以抽取为一个......
  • day18-线程
    线程创建线程方式:继承thread类,重写run()方法,调用start开启线程 1publicclassTestThreadextendsThread{2@Override3publicvoidrun(){4......
  • Python学习路程——Day18
    Python学习路程——Day18包的具体使用''' 虽然在python3中对包的要求低了,不需要__init__.py文件也可以识别,但是为了兼容性考虑,我们最好还是要加上__init__.py 1、如果......
  • 代码随想录 day18|513. 找树左下角的值 112. 路径总和 113. 路径总和 II 105. 从前序
    513.找树左下角的值题目|文章1.前序遍历思路题目的要求是先是最底层最左边的节点的值,我们使用前序遍历可以保证是最左边的值,通过深度变化时对节点更新,可以保证是最底......
  • Day18
    day181.包装类:ByteShortIntegerLongCharacterFloatDoubleBooleanint类转换成Integer类型使用构造方法:Integeri=newInteger使用静态方法:Integeri=Inte......
  • day18
    面向对象回顾及原型讲解面向对象回顾核心概念:万物皆对象(顶层对象Object)抽取行为作为方法抽取名词作为属性俩种构建对象的方式构造函数构建es6的形式classclassP......
  • 学习Js-day18
    放大镜的简单实现效果图如下:对结构,布局,效果,进行分析“一、结构分析:1.一个小盒子box包着一个移动的盒子move,再连接一个大盒子bigbox展示图片的细节。二、布局分析:1.放小......
  • java学习第七天xml.day18
      反射在java中,反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。   获取字节码的方式:  使用反射获取构造器:    内省 ......