我觉得回文子串就是我的一道坎。。。
这道题的话我想用从中间位置向两边搜索的思想,这样的话就需要考虑串的长度奇偶性的问题。
我试着写了一下处理奇偶的问题,但是一直报错,,,看了一下别人的代码,真是正确又优雅啊。。。。
(错误的)放在这警醒一下自己下次不要再写错了==
class Solution {
public:
int countSubstrings(string s) {
int res = 0;
int n = s.length();
for( int i = 0 ; i < n ; i ++ ){
for( int j = 0 ; i - j >= 0 && i + j < n ; j ++ ) //这里循环的判断条件不全
if( s[ i - j ] == s[ i + j ] ) //这个判断应该放在上面循环的判断条件里面,应该是连续相等
res ++;
for( int j = 0 ; i - j - 1 >= 0 && i + j < n ; j ++ )
if( s[ i - j - 1 ] == s[ i + j ])
res ++;
}
return res;
}
};
(正确的)
class Solution {
public:
int countSubstrings(string s) {
int res = 0;
int n = s.length();
for( int i = 0 ; i < n ; i ++ ){
for( int j = 0 ; i - j >= 0 && i + j < n && s[ i - j ] == s[ i + j ] ; j ++ )
res ++;
for( int j = 0 ; i - j - 1 >= 0 && i + j < n && s[ i - j - 1 ] == s[ i + j ] ; j ++ )
res ++;
}
return res;
}
};
(为了准备周五的测试要熟悉c++,但是看到java的代码,还是忍不住想看,先放在这,以后会有机会看的)
public class Solution {
int count = 0;
public int countSubstrings(String s) {
if (s == null || s.length() == 0) return 0;
for (int i = 0; i < s.length(); i++) { // i is the mid point
extendPalindrome(s, i, i); // odd length;
extendPalindrome(s, i, i + 1); // even length
}
return count;
}
private void extendPalindrome(String s, int left, int right) {
while (left >=0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
count++; left--; right++;
}
}
}