題目描述:
給你兩個字串 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...