字符串
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
1616 分割两个字符串得到回文串(分析)
1. 问题描述:给你两个字符串a 和b,它们长度相同。请你选择一个下标,将两个字符串都在相同的下标 分割开。由a可以得到两个字符串:aprefix和asuffix,满足a = aprefix + asuffix,同理,由b 可以得到两个字符串bprefix 和bsuffix,满足b = bprefix + bsuffix。请你判断aprefix + bsuffix 或者bprefix + asuffix能否构成回文串。当你将一个字符串s分割成sprefix...原创 2020-10-16 11:55:08 · 416 阅读 · 0 评论 -
1576 替换所有的问号(字符串)
1. 问题描述:给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 '?' 字符。题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。示例 1:输入:s = "?zs"输出:"azs"解释:该示例共有 25 种解决方案,从 "a原创 2020-09-13 10:17:44 · 788 阅读 · 0 评论 -
1156 单字符重复子串的最大长度(分析)
1. 问题描述:如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。给你一个字符串text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。示例 1:输入:text = "ababa"输出:3示例 2:输入:text = "aaabaaa"输出:6示例 3:输入:text = "aaabbaaa"输出:4示例 4:输入:text = "aaaaa"输出:5示例 5:输入:text = "abcdef".原创 2020-08-17 10:55:50 · 539 阅读 · 0 评论 -
1404 将二进制表示减到 1 的步骤数(分析、模拟)
1. 问题描述:给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数,则将其除以 2 。如果当前数字为奇数,则将其加上 1 。题目保证你总是可以按上述规则将测试用例变为 1 。示例 1:输入:s = "1101"输出:6解释:"1101" 表示十进制数 13 。Step 1) 13 是奇数,加 1 得到 14...原创 2020-04-23 17:09:00 · 445 阅读 · 0 评论 -
205 同构字符串(哈希表)
1. 问题描述:给定两个字符串s和t,判断它们是否是同构的。如果s中的字符可以被替换得到t,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t = "b...原创 2020-04-18 16:15:11 · 229 阅读 · 0 评论 -
5 最长回文子串(双指针、中心扩展算法)
1. 问题描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindr...原创 2020-04-12 18:57:54 · 429 阅读 · 0 评论 -
最长无重复子串
1. 问题描述(题目来源于 LeetCode 上第 3 号问题:无重复字符的最长子串)给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。2. 思路分析:① 我们可以先建立一个长度为125的整型数组,将当前出现的字符映射到字符ascii对应的整形数组的位置上,因为小写字母z的ascii为122,所以只需要声明125长度的数组就可以了② 循环遍历整个字符串,看一下当前正在...原创 2019-05-04 18:58:20 · 106 阅读 · 0 评论 -
求解模式串在源串中出现的次数(KMP算法的应用)
1. 问题描述:求解模式串在源串中出现的次数输入第一行一个整数N,表示测试数据组数。接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。其中N<=20输出对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。样例输入5...原创 2018-09-12 22:05:39 · 1091 阅读 · 0 评论 -
后缀数组与高度数组的使用(求解最长重复子串)
1. 后缀数组和高度数组联合可以求解最长重复子串(可重叠或者说可交叉)的问题例如:"123232323"的最长重复子串为232323,因为后缀23232323的前缀为232323与后缀232323的最大重复的元素为232323所以它的最长重复子串为232323sa数组的相关情况如下:(sa数组为所有后缀排好名之后的字符串数组,而且还绑定了后缀的下标)字符串 ...原创 2018-09-09 11:24:49 · 404 阅读 · 0 评论 -
KMP算法(next数组的使用之周期字符串)
1. 问题描述:题目:一个长为N (2 <= N <= 1 000 000) 的字符串,问前缀串长度为k(k > 1)是否是一个周期串,即k = A...A;若是则按k从小到大的顺序输出k即周期数;Sample Input3 aaa12 aabaabaabaab0Sample OutputTest case #12 23 3Test case #...原创 2018-09-08 22:56:51 · 481 阅读 · 0 评论 -
尺取法(hiho字符串)
1. 问题描述:如果一个字符串恰好包含2个'h'、1个'i'和1个'o',我们就称这个字符串是hiho字符串。 例如"oihateher"、"hugeinputhugeoutput"都是hiho字符串。现在给定一个只包含小写字母的字符串S,小Hi想知道S的所有子串中,最短的hiho字符串是哪个。输入字符串S 对于80%的数据,S的长度不超过1000 对于100%的...原创 2018-09-08 21:25:26 · 446 阅读 · 0 评论 -
尺取法之最短摘要的总结
1. 学会了使用JDK中的Arrays.binarySearch();来查找当前元素是否在数组里面,假如元素存在那么方法返回元素在数组中的下标,假如不存在则返回-1,这个方法对于处理字符串的问题的时候有时候可能很有效2. 学会了如何处理关键字中有重复的问题① 原来解决这个问题是使用辅助数组的方法,首先声明一个与要查找的关键字相同长度的数组来记录查找到的关键字,使用一个for循环来扫描...原创 2018-09-08 16:30:53 · 238 阅读 · 0 评论 -
尺取法之最短摘要的问题
1.问题描述:给定一段产品的英文描述,包含M个单词,每个英文单词以空格分隔,无其他的标点符号再给定N个英文单词关键字,要找出此产品描述中的包含的N个关键字(每个关键字至少出现一次)的长度最短的子串,作为产品简介输出,请说明思路并变成实现方法2.假设存储单词的变量为words,存储要查找的关键字为keys这道题目可以使用尺取法来求解,尺取法相当于一把尺子,在最外层的for循环中,...原创 2018-09-08 16:03:17 · 221 阅读 · 0 评论 -
尺取法之最短摘要的问题(暴力破解)
1. 问题描述:给定一段产品的英文描述,包含M个单词,每个英文单词以空格分隔,无其他的标点符号再给定N个英文单词关键字,要找出此产品描述中的包含的N个关键字(每个关键字至少出现一次)的长度最短的子串,作为产品简介输出,请说明思路并变成实现方法2. 使用两层循环依次扫描,第一层循环变量为i,第二层循环变量为j,那么每一次从i到j,判断i到j之间是否包含所有关键字,这里判断的处理交给一个函数...原创 2018-09-08 11:33:38 · 305 阅读 · 0 评论 -
KMP算法之next数组的求解
1.假设模式串(子串)p: 为 "bbabba" ,扫描模式串的指针为j, 当扫描到模式串不匹配的时候模式串回退的位置为k需要弄清楚的是next数组的含义,比如next[j] = k表示的是当p[j] == p[k]的判断不成立的时候(失配)k应该回退到模式串的下标为k的next[k]位置上比如模式串为bbabba,下面是求解过程 b b a b b a...原创 2018-09-06 18:18:07 · 541 阅读 · 0 评论 -
高度数组
1. 假设字符串尾 "ABABABB"那么它的所有后缀为:ABABABBBABABBABABBBABBABBBBB将上面的所有后缀排好序之后变成:ABABABBABABBABBBBABABBBABBBB高度数组为所有后缀排好序之后的相邻两个后缀之间的最大公共前缀比如height[1],看下标为1的后缀ABABB与上一个下标0的...原创 2018-09-07 22:32:02 · 451 阅读 · 0 评论 -
按照单词翻转字符串
1. 问题描述:例如:从控制台输入here are you,输出you are here思路是使用Java提供翻转字符串的方法,先翻转整个字符串,然后使用正则表达式对翻转后的字符串进行分割,这里使用空格分割,然后把分割后的结果存储到一个String数组中,之后再for循环中遍历然后再把每个单词翻转回来,具体的代码如下:import java.util.Scanner;public ...原创 2018-10-27 11:28:33 · 892 阅读 · 0 评论