判断是否是移位字符
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
思路
可以定义一个数组record,有26个元素的数组,初始化为0。
如果是两个字符串是移位字符串,那么每个字母的数目一定是一样的。
那么我们就可以在字符串中,找出这两个字符串中包含的字母的个数,然后进行比较。
如果一样说明是移位字符,如果不一样说明不是。
比较的时候可以通过作差的方式比较,差为0则相等。
代码
public class Leet242 {
public boolean isAnagram(String s, String t){
int[] record = new int[26];
for (char c:s.toCharArray()) {
record[c - 'a']++;
}
for (char c:t.toCharArray()) {
record[c - 'a']--;
}
for (int i:record) {
if(i != 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Leet242 l242 = new Leet242();
String s1 = "abstract";
String s2 = "abstcart";
String s3 = "aastract";
System.out.println(l242.isAnagram(s1,s2));
System.out.println(l242.isAnagram(s1,s3));
}
}
赎金信
题目介绍
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
思路
要判断ransomNote能不能由magazine中的字符构成,那么很显然ransomNote需要的字符的数量要小于magazine中包含的字母的数量。
这一次也只考虑小写英文字母,那么久只要建立26个字母就可以。
代码
public class Leet383 {
public boolean canConstruct(String ransomNote, String magazine){
int[] record = new int[26];
for (char c:ransomNote.toCharArray()) {
record[c - 'a']++;
}
for (char c:magazine.toCharArray()) {
record[c - 'a']--;
}
for (int i:record) {
if(i > 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Leet383 l383 = new Leet383();
String s1 = "readers";
String s2 = "readpaperaminergithubscihubwebofsciencetedscience";
System.out.println(l383.canConstruct(s1, s2));
}
}