面試題 尋找字串中由2種字元組成的最長連續子串

2022-08-24 08:06:06 字數 698 閱讀 6513

這是前段時間遇到的一道面試題,尋找字串中由任意2種字元組成的最長連續子串,例如輸入為「abababccef」,輸出為6,要找的子串為「ababab"。暴力的一點的解法是從每個字串開始向前遍歷,找到符合條件的最小下標值,再計算長度。

public

static

intfindsubstring(string str)

}int tmp = i -j;

if (tmp >max)

max =tmp;

}return

max;

}

這種方法的時間複雜度是o(n^2),面試官後來說暴搜其實是不得分的。另一種更快的解決方法是記錄前乙個字元能夠向前找到的最小下標位置,計算長度就可以在常數時間完成,時間複雜度為o(n)。

public

static

intfastfindsubstring(string str)

else}}

int tmp=i-start;

if(maxmax=tmp;

return

max;

}

估計如果我當時能做到這一步的話,問題會變成3種字元,或者n種字元,維護乙個大小為n的有序列表,能得到前乙個字元的最前下標就行了。

面試時寫的**醜陋的沒法看,而且隨便就能找出bug,雖然掛了,但還是獲得了一些技術面經驗:

字串面試題 字串逆序

字串逆序可以說是最經常考的題目。這是一道入門級的題目。給定乙個字串s,將s中的字元順序顛倒過來,比如s abcd 逆序後變成s dcba 基本上沒有這麼考的,放在這裡主要是為了和後面的原地逆序做個對比。很簡單,直接分配乙個與原字串等長的字元陣列,然後反向拷貝一下即可。char reverse cha...

字串高頻面試題。

一 題目 把乙個01 只包含0和1的串 串進行排序。可以交換任意兩個位置,求最少交換的次數。方法 仿造快速排序裡面的partition的過程。最左邊的0和1是沒有意義的,從左到右掃到第乙個1,從右到左掃到第乙個0,然後交換,然後繼續掃下去,就ok啦。include include define ma...

面試題 分割字串

package interview.string public class splitdemo 程式設計 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如 我abc 4,應該截為 我ab 輸入 我abc漢def 6,應該輸出為 我abc 而不是...