0
点赞
收藏
分享

微信扫一扫

【LeeCode】647. 回文子串

yeamy 2023-02-08 阅读 65

【题目描述】

给你一个字符串 ​​s​​ ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

​​https://leetcode.cn/problems/palindromic-substrings/?favorite=2cktkvj​​


【示例】

 【LeeCode】647. 回文子串_java


【代码】​​泪雨潇虹​​

学习参考:中心扩展法

package com.company;
import java.util.*;

// 2022-02-08
class Solution {
public int countSubstrings(String s) {
int num = 0;
int n = s.length();
for (int i = 0; i < n; i++){ // 遍历回文中心点
for (int j = 0; j <= 1; j++){ // j=0,中心是一个点,j=1,中心是两个点; 如果3个数则可能回文了
int l = i;
int r = j + i;
while (l >= 0 && r < n && s.charAt(l--) == s.charAt(r++)) num++;
}
}
// System.out.println(num);
return num;
}
}

public class Test {
public static void main(String[] args) {
new Solution().countSubstrings( "abc"); // 输出:3 解释:三个回文子串: "a", "b", "c
new Solution().countSubstrings( "aaa"); // 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
}
}

【代码】admin

通过率 128/130  超时了,代码可用

思路: 基于双指针来实现的, 判断字符是否符合回文的特性

package com.company;
import java.util.*;

// 2022-02-08
class Solution {
List<String> list = new LinkedList<>();
public int countSubstrings(String s) {
if (s.length() == 1) return s.length();
for (int i = 0; i < s.length(); i++){
int start = i;
int end = s.length();
while (start < end){
String tmp = s.substring(start, end);
if (huiwei(tmp)){
list.add(tmp);
}
end--;
}
}
System.out.println(list);
return list.size();

}
private boolean huiwei(String s){
StringBuilder sb = new StringBuilder(s);
if (s.equals(sb.reverse().toString())) return true;
return false;
}
}


public class Test {
public static void main(String[] args) {
new Solution().countSubstrings( "abc"); // 输出:3 解释:三个回文子串: "a", "b", "c
new Solution().countSubstrings( "aaa"); // 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
}
}


举报

相关推荐

0 条评论