給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。這個題目可以轉化成找出該字串的最長回文字首。示例 1:
輸入: 「aacecaaa」 輸出: 「aaacecaaa」 示例 2:
輸入: 「abcd」 輸出: 「dcbabcd」
通過暴力列舉時間複雜度是o(nclass
solution
}for
(int i=s.
length()
-1;i>temp;i--
) str=str.
(s);
return str.
tostring()
;}//判斷是否是回文串
public
boolean
ishuiwen
(string s)
if(low<=high)
else
}}
2n^2
n2),直接tle了。
通過比較正序和反序字串的hash值是否相等來判斷兩個字串是否相等。
因為要用到雜湊值,所以最好設計乙個能盡可能少地產出雜湊衝突的演算法,這樣就可以直接通過比較hash值來判斷,而不需要再進行驗證了。
下面的這個演算法,我比較了一下驗證和沒驗證的時間,不驗證的話用了3ms,而驗證用了490ms。
該演算法的時間複雜度是o(n),空間複雜度o(n)class
solution
mul=
(mul*base)
%mod;
} stringbuilder str=
newstringbuilder(""
);if(best+
1str.
(s);
return str.
tostring()
;}//判斷是否是回文串
public
boolean
ishuiwen
(string s)
if(low<=high)
else
}}
只需要將s作為模式串,他的逆序串作為查詢串,之後就可以獲得最長的回文字首字串。
時間複雜度為o(n),空間複雜度為o(n)。class
solution
//返回最長回文字首的最後乙個字元的下標+1
public
intkmp
(string t,string p)
else
else}}
i=0;j=0;
while
(ielse
else}}
return j;
}}
214 最短回文串
難度 困難 題目描述 思路總結 python字串反轉幾種方法 還是那句話,現階段注重的是數量,質量等後期提高。這題利用簡單的直覺做題,這種思路還需要再積累。沒見過這種題是很難想出來的。題解一 class solution def shortestpalindrome self,s str str 思...
C LeetCode 214 最短回文串
給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 這題考慮把字串s分成s1和s2兩部分,即s s1 s2,其中s1為回文串,s2不是回文...
LeetCode214 最短回文串
給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 1 s s1 s2,其中s1是回文串,s2是s s1。2 ans 反轉後的s2 s cl...