1616 分割兩個字串得到回文串

2021-10-13 23:23:58 字數 1549 閱讀 4759

題目描述:

給你兩個字串 a 和 b ,它們長度相同。請你選擇乙個下標,將兩個字串都在 相同的下標 分割開。由 a 可以得到兩個字串: aprefix 和 asuffix ,滿足 a = aprefix + asuffix ,同理,由 b 可以得到兩個字串 bprefix 和 bsuffix ,滿足 b = bprefix + bsuffix 。請你判斷 aprefix + bsuffix 或者 bprefix + asuffix 能否構成回文串。

當你將乙個字串 s 分割成 sprefix 和 ssuffix 時, ssuffix 或者 sprefix 可以為空。比方說, s = 「abc」 那麼 「」 + 「abc」 , 「a」 + 「bc」 , 「ab」 + 「c」 和 「abc」 + 「」 都是合法分割。

如果 能構成回文字串 ,那麼請返回 true,否則返回 false 。

請注意, x + y 表示連線字串 x 和 y 。

示例 1:

輸入:a = 「x」, b = 「y」

輸出:true

解釋:如果 a 或者 b 是回文串,那麼答案一定為 true ,因為你可以如下分割:

aprefix = 「」, asuffix = 「x」

bprefix = 「」, bsuffix = 「y」

那麼 aprefix + bsuffix = 「」 + 「y」 = 「y」 是回文串。

示例 2:

輸入:a = 「ulacfd」, b = 「jizalu」

輸出:true

解釋:在下標為 3 處分割:

aprefix = 「ula」, asuffix = 「cfd」

bprefix = 「jiz」, bsuffix = 「alu」

那麼 aprefix + bsuffix = 「ula」 + 「alu」 = 「ulaalu」 是回文串。

1 <= a.length, b.length <= 105

a.length == b.length

a 和 b 都只包含小寫英文本母

方法1:

(1)貪心;

(2)使用中心擴充套件的思路,從中間開始盡量的向兩端擴充套件;

(3)由於只能有一次的分割,故分割一次後,或不分割的情形下,能夠擴充套件到兩端的就是可以構成回文;

class

solution

--left;

++right;

}return left;

}bool

checkpalindromeformation

(string a, string b)

//切割一次後,拼接到一起的兩個字串,盡量的向兩端擴充套件

left=

min(

check

(a,b,left)

,check

(b,a,left));

return left==-1

;//直到擴充套件到-1}}

;

1616 分割兩個字串得到回文串 字串

給你兩個字串 a 和 b 它們長度相同。請你選擇乙個下標,將兩個字串都在 相同的下標 分割開。由 a 可以得到兩個字串 aprefix 和 asuffix 滿足 a aprefix asuffix 同理,由 b 可以得到兩個字串 bprefix 和 bsuffix 滿足 b bprefix bsuf...

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...