LeetCode 438. 找到字串中所有字母異位詞
給定一個字串 s 和一個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。
字串只包含小寫英文字母,並且字串 s 和 p 的長度都不超過 20100。
說明:
- 字母異位詞指字母相同,但排列不同的字串。
- 不考慮答案輸出的順序。
示例 1:
輸入: s: "cbaebabacd" p: "abc" 輸出: [0, 6] 解釋: 起始索引等於 0 的子串是 "cba", 它是 "abc" 的字母異位詞。 起始索引等於 6 的子串是 "bac", 它是 "abc" 的字母異位詞。
示例 2:
輸入: s: "abab" p: "ab" 輸出: [0, 1, 2] 解釋:起始索引等於 0 的子串是 "ab", 它是 "ab" 的字母異位詞。 起始索引等於 1 的子串是 "ba", 它是 "ab" 的字母異位詞。 起始索引等於 2 的子串是 "ab", 它是 "ab" 的字母異位詞。
解題思路:
先把p排序好,然後遍歷s,每次遍歷都取出p長度的字串排序後看是否和p相同。
由於有很長的單一字串,所以加了一些判斷條件,判斷新出現的字元在字串p中是否出現過,如果沒出現則直接把這一串字元直接跳過,可以省下很多時間。
其實可以跟著這個思路做下去,每次判斷字串的頭和尾,把字串出現的次數用陣列儲存,每次只需要比較字元出現字數和p中的字元出現次數就行了,這樣可以省下排序時間。
程式碼:
class Solution { public: vector<int> findAnagrams(string s, string p) { vector<int> v; sort(p.begin(), p.end()); map<char, int> m; for(int i = 0; i < p.length(); i ++) m[p[i]] ++; int flag = 0; int l = p.length(); for(int i = 0; i + l <= s.length(); i ++){ if(flag) if(s[i+l-1] == s[i-1]) { v.push_back(i); continue; } else{ if(m[s[i+l-1]] == 0) i = i+l-1; flag = 0; continue; } string a; a.append(s.begin()+i, s.begin()+i+l); sort(a.begin(), a.end()); if(a == p) { v.push_back(i); flag = 1; } else flag = 0; } return v; } };
相關推薦
LeetCode 438. 找到字串中所有字母異位詞
給定一個字串 s 和一個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。 字串只包含小寫英文字母,並且字串 s 和 p 的長度都不超過 20100。 說明: 字母異位詞指字母相同,但排列不同的字串。 不考慮答案輸出的順序。 示例
Leetcode 438:找到字串中所有字母異位詞(最詳細解決方案!!!)
給定一個字串 s 和一個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。 字串只包含小寫英文字母,並且字串 s 和 p 的長度都不超過 20100。 說明: 字母異位詞指字母相同,但排列不同的字串。 不考慮答案輸出的順序
438. 找到字串中所有字母異位詞
最後問題縮小為: # 如何讓bac判斷三個元素都在abc中呢? # 比如,bab雖然ab在abc中,但是,沒有c所以也是錯的。 A: 只要保證p中的各個字母個數在s的子串中相同即可。 我的做法(超出時間限制) 思路一: class Solution:
LeetCode 438. Find All Anagrams in a String(找到字串中所有字母異位詞)
Given a string s and a non-empty string p, find all the start indices of p’s anagrams in s. Strings consists of lowercase English
【LeetCode 簡單題】98-找到字串中所有字母異位詞
宣告: 今天是第98道題。給定一個字串 s 和一個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上
LeetCode438題:找到字串中所有字母異位詞
原始思路1: 獲取p串的全排列,與s暴力對比 但這種方法時間複雜度太高,主要是因為全排列的複雜度太高,如果p字串長度為n的話,那麼全排列複雜度為O(n!)。嚴重超時。 public class Test { Set<String> set = new HashS
LeetCode242有效字母異位詞&&LeetCode438 找到所有字串中的字母異位詞
【242】有效的字母異位詞 給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = "anagram", t = "nagaram" 輸出:
LeetCode242有效字母異位詞&&LeetCode438 找到所有字串中的字母異位詞
【242】有效的字母異位詞 給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = "anagram", t = "nagaram" 輸出: true 示例 2: 輸入: s = "rat", t = "ca
438. Find All Anagrams in a String 找到字符串中所有字母異位詞
app while pan temp 左移 pen 語句 port code 1. 原始題目 給定一個字符串 s 和一個非空字符串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。 字符串只包含小寫英文字母,並且字符串 s 和 p 的長度都不超過
C++ Leetcode初級演算法之有效的字母異位詞
給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = “anagram”, t = “nagaram” 輸出: true 示例 2: 輸入: s = “rat”, t = “car” 輸出: false 說明: 你可以假設
Leetcode演算法Java全解答--49. 字母異位詞分組
Leetcode演算法Java全解答–49. 字母異位詞分組 文章目錄 Leetcode演算法Java全解答--49. 字母異位詞分組 題目 想法 結果 總結 程式碼 我的答案 大佬們的答
取出字串中所有字母(字元)
public static String getLetter(String a) { StringBuffer sb = new StringBuffer();
leetcode 有效的字母異位詞
說明 lean 有效 javascrip 給定 ram car ron 輸入 給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = "anagram", t = "nagaram" 輸出: true 示例 2:
【leetcode 簡單】 第七十題 有效的字母異位詞
給定 etc turn dot 怎麽辦 sorted 說明 ott 編寫 給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = "anagram", t = "nagaram" 輸出: true 示例 2: 輸
LeetCode--242--有效的字母異位詞
時間復雜度 sel spa 說明 復雜度 color lee and nic 問題描述: 給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = "anagram", t = "nagaram" 輸出: true
【LeetCode 簡單題】66-有效的字母異位詞
宣告: 今天是第66道題。給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連
【LeetCode】242. 有效的字母異位詞
題目連結:https://leetcode-cn.com/problems/valid-anagram/description/ 題目描述 給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。 示例 輸入: s = “anagram”, t
【LeetCode】49. 字母異位詞分組
題目連結:https://leetcode-cn.com/problems/group-anagrams/description/ 題目描述 給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。 示例 輸入: [“eat”, “tea”, “
LeetCode題目--有效的字母異位詞(python實現)
題目 給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = "anagram", t = "nagaram" 輸出: true
leetcode題庫——字母異位詞分組
題目描述: 給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。 示例: 輸入: ["eat", "tea", "tan", "ate", "nat", "bat"], 輸出: [ ["ate","eat","tea"], ["nat","tan