演算法學習之路 去除字串中的回文字段

2021-10-04 16:24:14 字數 1809 閱讀 5297

前兩天面試的時候,面試官出了一題很基礎的演算法題:給一串字串,如何消除其中的回文。乍一看是很基礎的演算法題,不過我當時使用的暴力破解法的時間複雜度達到了o(n3),可以說是很爛的乙個演算法了(這裡不再貼出**,沒什麼意義)。之後到網上尋求了各種幫助,總結了兩個基於棧的實現方法:

一:返回無回文字段(包括清除後有可能存在的回文字段)

public class plalindromearithmetic 

char inputchars = inputstr.tochararray();

char outputchars = new char[1000];

char termchars = new char[1000];

int j = 0;

for (char inputchar:inputchars)else

//在棧頂元素不等於入棧元素的情況下,判斷棧元素是否大於2,若大於2則判斷棧頂的下乙個元素outputchars[j-1]是否等於入棧元素inputchar

//此處判斷12321類回文

} else if (j-1 >= 0 && termchars[j-1] == inputchar)

//在棧頂元素以及棧頂下一元素都不等於入棧元素的情況下,入棧

} else }}

return string.copyvalueof(outputchars);

}}

注意:該方法返回的字串是完全無回文的字串,例如"1232212342"輸出"2342":"1232212342"->"1212342"->"2342"

二、標記-清除-保護(僅刪除輸入串中所有的回文元素,新生成的回文字串不進行判斷)

public static string clearplalindromewithstackv2(string inputstr) 

char inputchars = inputstr.tochararray();

char outputchars = new char[1000];

int j = 0;

int i = j;

int protect = 0;

for (char inputchar : inputchars) else

}protect = 0;

}else

//在棧頂元素不等於入棧元素的情況下,判斷棧第i-1個元素是否大於被保護元素下標protect,若大於protect則判斷下乙個元素outputchars[i-1]是否等於入棧元素inputchar

//此處判斷12321類回文

}else if (i-1 > protect && outputchars[i-1] == inputchar)

j++;

outputchars[j] = inputchar;

i--;

}else ;

}protect = i;

}j++;

outputchars[j] = inputchar;

i = j;}}

}return string.copyvalueof(outputchars);

}

此方法是我根據方案一進行的修改,在方案一中,每次彈出棧新生成的棧頂元素的下一元素都有可能被對比,而這個方案則將該元素進行保護,新生成的字串仍然有可能輸出新的回文字段,例如"721237221456554"輸出"7371454"。

本**僅提供思路,稍加修改也可用於尋找所有字串,尋找最長字串等演算法,這邊就不再貼出詳細**,核心思想都是一樣的。

本人初學演算法,**和思路的實現還有很多瑕疵,歡迎各位大神提供更優方案。

演算法學習之路 回文映象串

判斷乙個字串是不是映象串和回文串 下表是題目所給的對稱字元。輸入格式 輸入多組資料,每行乙個字串 輸出格式 字串 是否是回文串,映象串,回文映象串.輸入樣例 notapalindrome isapalinilapasi 2a3meas atoyota 輸出樣例 notapalindrome is n...

演算法學習之路 字串壓縮與解壓

文字壓縮有很多種方法,這裡我們只考慮最簡單的一種 把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。解壓方法就是反過來,把形如 5c 這樣的表示恢復為 ccccc。本題需...

字串各演算法學習

在網路賽期間罷賽不做題了過來寫部落格真是一種罪過,然而被零封實在是沒有勇氣堅持最後乙個小時。兩個隊友都不在,單挑太水了 進入正題 模版上述地方有,根據題目對自己的理解進行解釋 題意 給定m和l和乙個字串,求該串中連續m個長為l的子串互不重複的數目 char s maxn ull base maxn ...