字符串
baj001
这个作者很懒,什么都没留下…
展开
-
LeetCode 28. 实现 strStr() 的 KMP 解法
原题链接使用KMP算法实现 strStr()关于kmp算法,首先定义了next数组,next数组就是一个前缀表首先定义了getNext 函数来 生成要检测字符串的next数组然后在主函数中进行调用,关于前缀表的使用:每当检测到两个字符不同的时候,就将needle的索引定位到next[j - 1]的位置,然后继续来判断执行,直到 needl 中的下标 为 needle的长度的时候,就停止。class Solution { public int strStr(String haystac.原创 2022-03-17 12:49:48 · 304 阅读 · 0 评论 -
KMP算法
KMP主要应用在字符串匹配上。KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。所以如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。什么是前缀表??如上的next数组其实就是前缀表作用:前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配关于最长公共前后缀前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。如下是 字符串 aabaaf 的前缀后缀是指不包.原创 2022-03-17 11:23:22 · 789 阅读 · 0 评论 -
LeetCode 剑指 Offer 58 - II. 左旋转字符串
原题链接class Solution { public String reverseLeftWords(String s, int n) { int index = n - 1; //其实就是实现 将前 n个字符移动到后面, StringBuilder sb = new StringBuilder(); //首先将s的后面剩余的字符append到sb上 while(n < s.length()){ .原创 2022-03-16 11:49:19 · 126 阅读 · 0 评论 -
LeetCode 344. 反转字符串
原题链接使用双指针实现class Solution { public void reverseString(char[] s) { /** 使用双指针进行交换 */ int left = 0; int right = s.length -1; while(left < right){ char temp = s[left]; s[left].原创 2022-03-16 09:13:59 · 67 阅读 · 0 评论 -
剑指offer 05 替换空格
思路原题链接在Java语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现 使用StringBuilder首先是由**toCharArray()**将字符串转换为字符数组使用增强for循环来实现将 s 依此赋给 c如果c是空格,在res后面append %20 若不是append c最后返回要使用toString()class Solution { public String replaceSpace(String s) {原创 2022-01-21 12:01:44 · 256 阅读 · 0 评论 -
LeetCode 541反转字符串II
思路首先将字符串s转换为字符数组进入for循环,每次将i += 2*kstart = i ,end 取字符数组索引的最大值,和start + k - 1 之间的最小值while(start < end) 开始进行交换最后返回字符串 return new String(ch);class Solution { public String reverseStr(String s, int k) { char[] ch = s.toCharArray();原创 2022-01-19 11:33:43 · 190 阅读 · 0 评论 -
leetcode 151翻转字符串里的单词
思路可以分为如下的三步,首先删除多余的空格,再翻转整个字符串,最后将字符串中的每个单词进行单独的翻转。进行空格移除: 定义start和end,当start所在的索引对应的字符是空格的时候,将start自增,同理将end自减,直到start和end对应的索引所在的值都是非空格的时候,执行下一步;将start的字符值赋值给c,如果c为非空格,或者sb中的最后一个元素也是非空格的,则将此值append进入sb中。此处的关键是:当进行多余空格的删除操作的时候,在经过了,上面两个while的删除前后的多原创 2022-01-19 15:38:41 · 250 阅读 · 0 评论 -
leetcode 28 实现strStr()
思路首先计算出两个字符串的长度haystack长度为n needle长度为m使用两次for循环,第一层for循环的条件是 i+m要小于n,目的保证i加上needle的长度不越界之后设定一个标志位flag为true执行第二层for循环,j小于m的时候,j++当haystack.charAt(i+j) != needle.charAt(j)的时候,说明此位置上,不满足两个字符串重合,则,将标志位设定为false,跳出此次的for循环若第二个for循环的条件全部都满足,则直接返回flag的标志位 t原创 2022-01-20 12:26:52 · 320 阅读 · 0 评论