LeetCode-有效的字母异位词
生活随笔
收集整理的這篇文章主要介紹了
LeetCode-有效的字母异位词
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
給定兩個字符串?s?和?t?,編寫一個函數來判斷?t?是否是?s?的字母異位詞。
輸入: s = "anagram", t = "nagaram" 輸出: true 輸入: s = "rat", t = "car" 輸出: false思路:
1、可以用排序,然后再進行比較是否相同。不過再這個之前,可以先判斷兩個字符串長度是否相同,如果不同,可以直接返回false。
public boolean isAnagram(String s, String t) {if (s.length() != t.length()) {return false;}char[] str1 = s.toCharArray();char[] str2 = t.toCharArray();Arrays.sort(str1);Arrays.sort(str2);return Arrays.equals(str1, str2); }2、哈希表。因為涉及到字母,都是只包含26個字母,可以創建一個大小為26的數組
然后進行分別計算S字符串中字母的頻率和T字符串中字母的頻率,S增加,T減少,最后,如果計數器為0,那么說明兩個字符串是字母異位詞
或者可以先用計數器計算S,然后用T減少每個字母,如果任何時候計數器低于0,就知道T包含一個不在S中的額外字母,就可以立即返回False
Java
class Solution {public boolean isAnagram(String s, String t) {//如果我們s和 t 的長度不一樣,則立即返回falseif (s.length() != t.length()) {return false;}//只有26個字符大小int[] table = new int[26];//先用計數器表計算 s,然后用 t 減少計數器表中的每個字母的計數器。如果在任何時候計數器低于零,我們知道 t包含一個不在 s中的額外字母,并立即返回 FALSEfor (int i = 0; i < s.length(); i++) {table[s.charAt(i) - 'a']++;}for (int i = 0; i < t.length(); i++) {table[t.charAt(i) - 'a']--;if (table[t.charAt(i) - 'a'] < 0) {return false;}}return true;} }C 語言
bool isAnagram(char * s, char * t){if(strlen(s)!=strlen(t)) return false;int table[26]={};for(int i=0;i<strlen(s);++i){table[s[i]-'a']++;}for(int i=0;i<strlen(t);++t){table[t[i]-'a']--;if(table[t[i]-'a']<0) return false;}return true; }C++
class Solution { public:bool isAnagram(string s, string t) {if(s.size()!=t.size()){return false;}int table[26]={};for(int i=0;i<s.size();++i){table[s[i]-'a']++;}for(int i=0;i<t.size();++i){table[t[i]-'a']--;if(table[t[i]-'a']<0){return false;}}return true;} };Python
直接調用使用內置模塊collections中的Counter類
class Solution:def isAnagram(self, s: str, t: str) -> bool:return collections.Counter(s) == collections.Counter(t)?
?
總結
以上是生活随笔為你收集整理的LeetCode-有效的字母异位词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: InvalidCharacterErro
- 下一篇: css设置字体颜色、文本对齐方式、首行缩