一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Example 1:
Input: s = "anagram", t = "nagaram"
Output: true
Example 2:
Input: s = "rat", t = "car"
Output: false
Constraints:
1 <= s.length, t.length <= 5 * 104
s
andt
consist of lowercase English letters.
Follow up: What if the inputs contain Unicode characters? How would you adapt your solution to such a case?
package com.string;
import java.util.Arrays;
/**
* @Author you guess
* @Date 2022/4/8 22:05
* @Version 1.0
* @Desc 给定 s t 判断是否是 相同字母异序词
*/
public class Leetcode_242_ValidAnagram {
/**
* 方法1: c - 'a',遍历s把指定下标的元素加1 ,遍历t把指定下标的元素减1,遍历数组,只要有一位不为0则返回false
* Runtime: 5 ms, faster than 65.98% of Java online submissions for Valid Anagram.
* Memory Usage: 43 MB, less than 81.66% of Java online submissions for Valid Anagram.
*
* @param s
* @param t
* @return
*/
public boolean isAnagram1(String s, String t) {
if (s.length() != t.length()) {
return false;
}
//不可是Integer[] bArr = new Integer[10];初始化元素都是null
int[] arr = new int[26];//初始化元素都是0
for (int i = 0; i < s.length(); i++) {
arr[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
arr[t.charAt(i) - 'a']--;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) return false;
}
return true;
}
/**
* 方法2: char c,arr[c],遍历s把指定下标的元素加1 ,遍历t把指定下标的元素减1,遍历数组,只要有一位不为0则返回false
* Runtime: 2 ms, faster than 98.98% of Java online submissions for Valid Anagram.
* Memory Usage: 42.4 MB, less than 90.39% of Java online submissions for Valid Anagram.
*
* @param s
* @param t
* @return
*/
public boolean isAnagram2(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] arr = new int[123];//a-z 97-122
for (int i = 0; i < s.length(); i++) {
arr[s.charAt(i)]++;//作用与下一行代码一致,把指定下标的元素加1
//arr[(int)s.charAt(i)]++;
}
for (int i = 0; i < t.length(); i++) {
arr[t.charAt(i)]--;
//arr[(int)t.charAt(i)]--;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) return false;
}
return true;
}
/**
* 方法3:方法2的优化,遍历t时可以直接判断,不用最后遍历一遍结果数组
* <p>
* Runtime: 3 ms, faster than 92.89% of Java online submissions for Valid Anagram.
* Memory Usage: 42.3 MB, less than 92.47% of Java online submissions for Valid Anagram.
*
* @param s
* @param t
* @return
*/
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] arr = new int[123];//a-z 97-122
for (int i = 0; i < s.length(); i++) {
arr[s.charAt(i)]++;//作用与下一行代码一致,把指定下标的元素加1
//arr[(int)s.charAt(i)]++;
}
for (int i = 0; i < t.length(); i++) {
if (arr[t.charAt(i)] > 0) {
arr[t.charAt(i)]--;
} else {
return false;
}
}
return true;
}
public static void main2(String[] args) {
Leetcode_242_ValidAnagram main = new Leetcode_242_ValidAnagram();
// System.out.println(main.isAnagram("afcv", "cvfa"));//true
// System.out.println(main.isAnagram("afcv", "cvfad"));//false
System.out.println(main.isAnagram("afcvb", "cvfad"));//false
}
public static void main(String[] args) {
int[] crr = new int[200];
char a = 'a';
System.out.println(crr[a]);//0
System.out.println(crr[a]--);//0
System.out.println(crr[a] + 2);//1
int[] arr = new int[10];//初始化正确
System.out.println(arr[0]);//0
System.out.println(arr[0] + 1);//1
System.out.println(arr[0] - 1);//-1
System.out.println('b' - 'a');//1
Integer[] bArr = new Integer[10];//初始化正确
System.out.println(bArr[0]);//null
//System.out.println(bArr[0]++);//NullPointerException
//System.out.println(bArr[0]--);//NullPointerException
Integer[] cArr = new Integer[]{1, 2};//初始化正确
//Integer[] dArr = new Integer[2]{1,2};//报错
char c = 'c';
System.out.println(c);//c
System.out.println((int) c);//99
int cint = c;
System.out.println(cint);//99
String s = "askcbd";
char[] sarr = s.toCharArray();
System.out.println(sarr);//askcbd
Arrays.sort(sarr);//返回void
System.out.println(sarr);//abcdks
String s2 = new String(sarr);
System.out.println(s2);//abcdks
String s3 = String.valueOf(sarr);
System.out.println(s3);//abcdks
}
}
end