网站建设运营知乎,网站云推广,网站建设需求分析模板,常州微信网站建设服务判断一个字符串是否是一个回文除了从两端向里移动指针#xff0c;也可以采用指针从字符串中心开始向两端延伸。即如果存在一个长度为m的回文子字符串#xff0c;再分别向该回文两端延伸一个字符#xff0c;并判断这两个字符是否相同#xff0c;如果相同则找到了一个长度为m… 判断一个字符串是否是一个回文除了从两端向里移动指针也可以采用指针从字符串中心开始向两端延伸。即如果存在一个长度为m的回文子字符串再分别向该回文两端延伸一个字符并判断这两个字符是否相同如果相同则找到了一个长度为m2的子字符串。 另外回文的长度即可以是奇数也可以是偶数所以回文的中心即可能是一个字符也可能是两个字符。 首先遍历字符串中的每个字符以每个字符为中心调用方法统计以当前字符为中心的回文子串数量回文长度为奇数情况以及以当前字符和下一个字符为中心的回文子串数量回文长度为偶数情况并将结果累加到总计数中。最终返回总计数。 方法通过两个指针从中心向两侧扩展判断对应位置的字符是否相等如果相等则回文子串数量加一直到不再满足回文条件。 public int countSubstrings(String s) {// 处理边界情况空字符串或长度为0的字符串if (s null || s.isEmpty()) {return 0;}int count 0; // 统计回文子串的总数量// 遍历字符串中的每个字符for (int i 0; i s.length(); i) {// 以当前字符为中心统计回文子串数量count countPalindrome(s, i, i);// 以当前字符和下一个字符为中心统计回文子串数量count countPalindrome(s, i, i 1);}return count;}// 统计以给定起始位置 start 和结束位置 end 为中心的回文子串数量public int countPalindrome(String s, int start, int end) {int count 0; // 统计回文子串的数量// 通过两个指针从中心向两侧扩展判断对应位置的字符是否相等while (start 0 end s.length() s.charAt(start) s.charAt(end)) {count; // 如果相等回文子串数量加一start--; // 移动左指针end; // 移动右指针}return count;}