Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit dd5a851

Browse files
committed
4
1 parent 8fc94d9 commit dd5a851

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

‎5. Longest Palindromic Substring.java

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
2+
3+
Example:
4+
5+
Input: "babad"
6+
7+
Output: "bab"
8+
9+
Note: "aba" is also a valid answer.
10+
Example:
11+
12+
Input: "cbbd"
13+
14+
Output: "bb"
15+
*/
16+
17+
/*解析:
18+
题目的意思就是找出最长的回文子串。如果有重复出现的,输出任意一个回文的就可以。
19+
也就是最终的结果有两个条件。1.回文 2.子串
20+
21+
*/
22+
23+
/*第一种方法(最后一个案例超时):完全是按照最普通的想法来实现的,其复杂度有点高,外层n轮 内层最大n轮 判断回文数是n轮
24+
在最坏的时候是O(n^3)*/
25+
26+
class Solution {
27+
public String longestPalindrome(String s) {
28+
String result=s.substring(0,1);
29+
//现找子串
30+
for(int i = 0 ;i<s.length();i++) {
31+
for(int j = i+1;j<s.length();j++) {
32+
if(isPalin(s,i,j)&&result.length()<j+1-i){
33+
result=s.substring(i,j+1);
34+
}
35+
36+
}
37+
}
38+
return result;
39+
40+
}
41+
//判断是不是回文数
42+
public boolean isPalin(String s,int i,int j) {
43+
boolean flag = true;
44+
while(i<j) {
45+
if(s.charAt(i)==s.charAt(j)){
46+
i++;
47+
j--;
48+
}
49+
else{
50+
flag = false;
51+
break;
52+
}
53+
}
54+
return flag;
55+
}
56+
}
57+
58+
/*第二种方法:
59+
想一下回文的概念是什么?那就是正序和逆序一样,
60+
所以这个方法就是从每一个元素为中心,找他的回文数,结果成功,但是还是不够理想,复杂度有O(n^2)
61+
62+
暂时还不知道怎么改进,先放着吧!
63+
*/class Solution {
64+
public String longestPalindrome(String s) {
65+
String result=s.substring(0,1);
66+
System.out.println(result);
67+
//找到以每一个元素为中心,或者以两个元素的的回文数
68+
int start;
69+
int end;
70+
for(int i =0;i<s.length();i++){
71+
start = i-1;
72+
end = i+1;
73+
//情况1:以本元素为中心的回文数
74+
while(start>=0&&end<s.length()&&s.charAt(start)==s.charAt(end)){
75+
76+
if(end-start+1>result.length())
77+
result=s.substring(start,end+1);
78+
79+
start--;
80+
end++;
81+
}
82+
83+
//情况2:以本元素和下一个元素为中心的回文数
84+
start = i;
85+
end = i+1;
86+
while(start>=0&&end<s.length()&&s.charAt(start)==s.charAt(end)){
87+
88+
if(end-start+1>result.length())
89+
result=s.substring(start,end+1);
90+
start--;
91+
end++;
92+
}
93+
}
94+
95+
return result;
96+
97+
98+
}
99+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /