NC353. 回文子串的数量
描述
示例1
输入:
"nowcoder"
输出:
8
示例2
输入:
"nnn"
输出:
6
说明:
六个回文子字符串分别是 n , n , n , nn , nn , nnnC++ 解法, 执行用时: 3ms, 内存消耗: 392KB, 提交时间: 2022-08-01
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return int整型 */ int ans=0; int Substrings(string str) { // write code here int N=str.size(); for(int i=0;i<N;i++) { Isplm(str,i,i); Isplm(str,i,i+1); } return ans; } void Isplm(const string&str,int left,int right) { int N=str.size(); while(left>=0&&right<N) { if(str[left]!=str[right]) { break; } ans++; left--; right++; } } };
C++ 解法, 执行用时: 3ms, 内存消耗: 424KB, 提交时间: 2022-05-19
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return int整型 */ int Substrings(string str) { // write code here int cnt = 0, n= str.length(); for (int i = 0; i < 2*n-1; i++) { int left = i / 2, right = i / 2 + i % 2; while (left >= 0 && right < n && str[left] == str[right]) { left--; right++; cnt++; } } return cnt; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 424KB, 提交时间: 2022-04-17
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return int整型 */ int Substrings(string str) { // write code here int N = str.size(), ans = 0; for(int i=0; i<N; i++){ for(int j=0; i+j>=0 and i+j<N; j++){ int st = i-j, ed = i+j; if(str[st]!=str[ed]) break; ans++; } for(int j=0; i+j>=0 and i+j+1<N; j++){ int st = i-j, ed = i+j+1; if(str[st]!=str[ed]) break; ans++; } } return ans; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 436KB, 提交时间: 2022-06-16
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return int整型 */ int Substrings(string str) { // write code here int n = str.length(); if (n <= 1) return n; int maxlen = 1; int left = 0, right = 0; int temp = -1; int result = n; for (int i = 0; i < n; i++) { left = i - 1; right = i + 1; temp = 1; if (left >= 0 && right < n && str[left] == str[right]) { while (1) { if (left < 0 || right >= n || str[left] != str[right]) { left++; right--; break; } left--; right++; result++; } } left = i; right = i + 1; if (left >= 0 && right < n && str[left] == str[right]) { while (1) { if (left < 0 || right >= n || str[left] != str[right]) { left++; right--; break; } left--; right++; result++; } } } return result; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 504KB, 提交时间: 2022-04-19
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return int整型 */ int extend(const string& s,int i,int j,int size){ int res=0; while(i>=0&&j<size&&s[i]==s[j]){ i--; j++; res++; } return res; } int Substrings(string s) { // write code here int res=0; for(int i=0;i<s.size();i++){ res+=extend(s,i,i,s.size()); res+=extend(s,i,i+1,s.size()); } return res; } };