資料結構與演算法常考面試題

2021-10-07 07:49:59 字數 2348 閱讀 5179

陣列和字串是最基本的資料結構,在很多程式語言中都有著十分相似的性質,而圍繞著它們的演算法面試題也是最多的。

很多時候,在分析字串相關面試題的過程中,我們往往要針對字串當中的每乙個字元進行分析和處理,甚至有時候我們得先把給定的字串轉換成字元陣列之後再進行分析和處理。

舉例:翻轉字串「algorithm」。

解法:用兩個指標,乙個指向字串的第乙個字元 a,乙個指向它的最後乙個字元 m,然後互相交換。交換之後,兩個指標向**一步步地靠攏並相互交換字元,直到兩個指標相遇。這是一種比較快速和直觀的方法。

注意:由於無法直接修改字串裡的字元,所以必須先把字串變換為陣列,然後再運用這個演算法。

public class test 

string ret = string.valueof(arr);

string ret1 = new string(arr);

system.out.println(ret);

system.out.println(ret1);

}}

leetcode 第 242 題:給定兩個字串 s 和 t,編寫乙個函式來判斷 t 是否是 s 的字母異位詞。

說明:你可以假設字串只包含小寫字母。

示例 1

輸入: s = "anagram", t = "nagaram"

輸出: true

示例 2

輸入: s = "rat", t = "car"

輸出: false

public class testdemo 

int a = new int[26];

int b = new int[26];

for (int i = 0; i < 26; i++)

for (int i = 0; i < s.length(); i++)

for (int i = 0; i < 26; i++)

} return true; }

public static void main(string args)

}

public class testdemo 	

int a = new int[26];

for (int i = 0; i < 26; i++)

for (int i = 0; i < s.length(); i++)

for (int i = 0; i < t.length(); i++)

for (int i = 0; i < 26; i++)

} return true; }

public static void main(string args)

}

public static boolean isanagram(string s,string t) 	

char a = s.tochararray();

char b = t.tochararray();

arrays.sort(a);

arrays.sort(b);

for (int i = 0; i < b.length; i++)

} return true;

}

leetcode 第 03 題:給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。

示例 1

輸入:"abcabcbb"

輸出:3

解釋:因為無重複字元的最長子串是"abc",其長度為3。

示例 2

輸入:"bbbbb"

輸出:1

解釋:因為無重複字元的最長子串是 "b",其長度為 1。

示例 3

輸入:"pwwkew"

輸出:3

解釋:因為無重複字元的最長子串是 "wke",其長度為 3。

注意:答案必須是子串的長度,"pwke" 是乙個子串行,不是子串。

public static int lengthoflongestsubstring(string s) 

set.add(s.charat(j));

max = math.max(max, set.size());

}return max;

}

優化的線性法:

public static int lengthoflongestsubstring(string s)

map.put(s.charat(j), j);

max = math.max(max, j - i + 1);

} return max;

}

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的...