給定乙個字串,找到包含該字串所有字元的最短子串

2021-09-25 07:37:24 字數 1071 閱讀 4493

**:

這題是豌豆莢二面的乙個演算法題,和leetcode的某些題目類似。其思路是這樣的

首先遍歷一次字串,求出字串不同字元的數目

為每乙個字元儲存乙個列表,記錄該字元在字串**現的索引

記錄待求字串的首字母的索引start(初始值為0),結束索引end(初始值為length-1)

記錄可能的待求字串的首字母的索引值為pstart(初始值為0)

重新遍歷字串,當前索引為index 

更新沒有遍歷的字元的數目,更新當前字元對應的索引列表。如果pstart處字元對應的列表長度大於1,則從索引列表中移出pstart,並將pstart加1,並重複該過程

如果index處字元是第一次出現,則將剩餘字元數目減一

如果剩餘字元數目為0時,且子字串[pstart:index]比[start:end]短,則更新[start:end]為[pstart:index]

返回子字串[start:end

你會發現[start:end]為待求字串。可以在紙上畫畫看

class solution

// 記錄目標字串的起始索引

int start = 0, end = str.length() - 1;

// 記錄目標字串的開始位置

int pstart = 0;

map> map = new hashmap>();

for (int index = 0; index < str.length(); index++)

int remainingcharacter = map.keyset().size();

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

map.get(c).add(i);

while (map.get(str.charat(pstart)).size() > 1)

if (remainingcharacter == 0) }}

return str.substring(start, end + 1);}}

class testsolution

}--------------------- 

字串處理 乙個字串包含另乙個字串的所有字元

假設這有乙個各種字母組成的字串,假設這還有另外乙個字串,而且這個字串裡的字母數相對少一些。從演算法是講,什麼方法能最快的查出所有小字串裡的字母在大字串裡都有?比如,如果是下面兩個字串 string 1 abcdefghlmnopqrs string 2 dcgsrqpom 答案是true,所有在st...

php判斷乙個字串包含另乙個字串

a 58252,58253 如果 a 中存在 b,則為 true 否則為 false。b 58253 if strpos a,b false else 查詢字串在陣列中出現的次數 array array 1,hello 1,world hello 11 計算 string在 array 需為陣列 中...

給定乙個字串,找出該字串的最長回文子串

給定乙個字串,找出該字串的最長回文子串。回文字串指的就是從左右兩邊看都一樣的字串,如aba,cddc都是回文字串。字串abbacdc存在的回文子串有abba和cdc,因此它的最長回文子串為abba。public class longpalindromic private static string ...