题目:判断字符串有无重复字符
判断一个字符串中是否有重复的字符。假设都是ASCII字符。
java代码示例:
1 |
|
程序运行结果:
1 | true |
题目:翻转字符串
请实现一个算法,翻转一个给定的字符串。
java代码示例:
1 | public class 翻转字符串 { |
程序运行结果:
1 | gfedcba |
题目:变形词问题
给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
这里规定大小写为不同字符,且考虑字符串中的空格。
给定一个str1和一个str2,请返回一个boolean,代表两串是否重新排列后可相同。
保证两串的长度都小于5000.
解题思路:
方案1:首先判断两个字符串长度是否相等。如果不相等直接返货false。然后将两个字符串变为字符数组,将字符数组分别进行排序。比较两个字符数组是否相等。若相等返回true。否则返回false。时间复杂度:Nlgn
方案2:利用计数排序的思想。将第一个字符串的字符个数进行记录。然后利用第二个字符串的字符,将计数器减少,如果相等。计数器都为0,出现负数则返回false。
java代码示例:
1 | import java.util.Arrays; |
程序运行结果:
1 | true |
题目:替换空格
请编写一个方法,将 字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写英文字母组成。
输入:给定一个String str为原始的串,以及串的长度int len,返回替换后的str。
java代码示例:
1 | public class 替换字符串中的空格 { |
程序运行结果:
1 | I%20am%20Mike |
题目:压缩字符串
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。
若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString为待压缩的串(长度小于等于10000),
保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。
测试样例
“aabcccccaaa”
返回:”a2b1c5a3”
java代码示例:
1 | public class 压缩字符串 { |
程序运行结果:
1 | a2b3c4d2a3 |
题目:判断两字符串的字符集是否相等
实现一个算法,判断组成两字符集的字符是否相等。
java实现代码:
1 | import java.util.HashMap; |
程序运行结果:
1 | false |
题目:旋转词
给定两个字符串s1和s2,要求判定s2是否能被通过s1作循环一位得到的字符串包含。
例如:给定s1 = AABCD,s2 = CDAA,返回true。给定s1 = ABCD,s2 = ACBD,返回false。
java示例代码:
1 | public class 旋转词 { |
程序运行结果:
1 | true |
题目:将字符串按单词翻转
实现一个算法,将一个字符串按单词翻转。
例如:are you ok 翻转后为: ok you are
java代码示例:
1 | public class 字符串按单词翻转 { |
程序运行结果:
1 | ok you are |
题目:去掉字符串中连续出现的k次的0
1 | public class 去掉字符串中连续出现的K次的0 { |
程序运行结果:
1 | 1kjd0sdlsdalj0 |
题目:最短摘要的生成
给定一段产品的英文描述,包含M个英文单词,每个英文单词以空格分割,无其他标点符号;再给定N个英文单词关键词.目标是找出此产品描述中含N个关键词(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。
解题思路:
方法1:暴力破解。
双层循环,定住一个来寻找后面包含所有关键字的一段。记录此时的长度。循环执行,找到最短的子串。并记录最短子串的开始下标和结束下标。
方法2:尺取法。
通过两个指针,一个指左边第一个关键字,另一个指包含所有关键字的最短子串的最后一个。然后移动两个指针,找到最短子串。
java代码示例:
1 | import java.util.Arrays; |
程序运行结果:
1 | e f c |
题目:字符串匹配之RabinKarp
有两个串,一个源串,一个模式。实现一个算法查看在源串中能匹配模式的下标。例如:源串“abcdec”,模式:“bcd” 则在源串中有bcd子串。并输出位置。
解题思路:
滚动hash法
对目标字符串按d进制求值,mod h 取余作为其hash
对源串,依次求出m个字符的hash,保存在数组中(滚动计算)
匹配时,只需比对目标串的hash值和预存的源串的hash值表
RabinKarp算法思想:可查看 http://blog.chinaunix.net/uid-26548237-id-3968132.html
java代码示例:
1 | public class RabinKarp { |
程序运行结果:
1 | match:2 |
算法改进:
对每n个字符做hash预处理,降低时间复杂度
1 | public class RabinKarp1 { |
题目:字符串匹配之KMP
有字符str = “babababcbabababb”, 模式:s = “bababb”;
求出匹配位置。如果匹配返回匹配开始位置下标。否则返回-1.
java代码示例:
1 | public class KMP字符串匹配 { |
程序运行结果:
1 | 10 |