Leetcode 242. Valid Anagram-判断是否是 相同字母异序词
Posted 二十六画生的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 242. Valid Anagram-判断是否是 相同字母异序词相关的知识,希望对你有一定的参考价值。
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
以上是关于Leetcode 242. Valid Anagram-判断是否是 相同字母异序词的主要内容,如果未能解决你的问题,请参考以下文章