第一题 159. Longest Substring with At Most Two Distinct Characters
题目描述
在一个String中找出一个Substring,使得Substring 最多包含2个不同的Char。
算法
利用HashMap存储两个最新的位置,当有第三个加入HashMap的时候,说明已经多于两个,进行操作。注意不要使用for循环,用for循环后很多testcase会出现很难解决的逻辑问题。
第二题 340. Longest Substring with At Most K Distinct Characters
题目描述
在一个String中找出一个Substring,使得Substring 最多包含k个不同的Char。
算法
算法与之前相同
第三题 249. Group Shifted Strings
题目描述
给定很多的String。对每一个String,其中的每一个char可以按照从a -> z -> a的方式循环移动。查看String中能否有相同的String可以通过其他String移动而来,将他们归并为机组。
算法
这道题目我们可以转化成String中每个char的差值的问题。对于acd与bde,或者xza。我们发现,只要他们之间char的差值是一样的,那么他们必然是可以通过移动得到的,这样,我们就只需要将他们的差值作为map存储下来即可
第四题 246. Strobogrammatic Number
算法
3种算法,可以利用HashSet, HashMap, 或者直接进行String的比对
第五题 594. Longest Harmonious Subsequence
题目描述
给定整数数组nums,求其中最大值与最小值相差恰好为1的子序列的长度的最大值。
注意: 数组长度不超过20000
算法
两种方法,一种用TreeMap(自带key排序),一种用HashMap
第六题 205. Isomorphic Strings
题目描述
给定两个字符串s和t,判断它们是否是同构的。
如果字符串s可以通过字符替换的方式得到字符串t,则称s和t是同构的。
字符的每一次出现都必须被其对应字符所替换,同时还需要保证原始顺序不发生改变。两个字符不能映射到同一个字符,但是字符可以映射到其本身。
测试样例如题目描述。
可以假设s和t等长。
算法
利用HashMap
利用HashMap查看每次出现的值是否已经有正确的对应或者是否为第一次出现。
利用数组存储
由于ASC码中总共的character有256个,所以对于情况发生次数有限的情况,可以用数组进行存储。这样的话程序的效率会快得多