面试题01.01.判定字符是否唯一
实现一个算法,确定一个字符串s的所有字符是否全都不同。
示例1:
输入: s = "leetcode"
输出: false
示例2:
输入: s = "abc"
输出: true
|= 即 a=a|b
|运算的规则是当两个位都为0时,结果为0,否则为1;
方法一:
双重暴力循环
方法二:
set哈希
方法三:
bool数组标识
方法四:
位运算
借助int类型的变量来代替长度为26的bool数组。
面试题01.02.判断是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = "abc", s2 = "bca"
输出: true
示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false
我的理解就是判断两个字符串中所包含的字符是否相同;
所以直接使用map来存储,或者set;
两个字符串分别循环,第一个添加,第二个删除,最后判断map中的值是否都为空
面试题01.03.URL化
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例1:
输入:"Mr John Smith ", 13
输出:"Mr%20John%20Smith"
示例2:
输入:" ", 5
输出:"%20%20%20%20%20"
这道题我觉得是之前字符串替换的变式,多了对最后空格的判断;
所以先将空格的数量记录下来,再用数学关系控制新数组的长度;
面试题01.04回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)
首先分析回文串的特征,特征就是这些字符的数量是偶数或者只有一个奇数;
使用散列表的思想将字符的个数记录,这里可以直接使用new int【128】;
然后当出现一个奇数的时候,判断再有没有奇数,如果有则是错的。
面试题01.06.字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:"aabcccccaaa"
输出:"a2b1c5a3"
示例2:
输入:"abbccd"
输出:"abbccd"
解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。
这道题算是很容易理解,我觉得就用双指针解题即可;
i控制字符,j控制个数
i从0开始走,j=i,如果下一个字符相同就j++;不相同则i=j;