65,176
社区成员




// leetcode5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<string>
#include<vector>
using namespace std;
string longestCommonSubstring(string s1, string s2)
{
int N = s1.size(), M = s2.size(), len = 0, r = -1;
vector<vector<int>> mem(N, vector<int>(M, 0));
for (int i = 0; i<N; ++i) {
for (int j = 0; j<M; ++j) {
if (s1[i] == s2[j]) {
mem[i][j] = (i == 0 || j == 0) ? 1 : mem[i - 1][j - 1] + 1;
if (mem[i][j] > len) len = mem[i][j], r = i;
}
else {
mem[i][j] = 0;
}
}
}
return s1.substr(r - len + 1, len);
}
string longestPalindrome(string s)
{
if (s.empty())return NULL;
string s1(s.rbegin(), s.rend());
return longestCommonSubstring(s, s1);
}
int main()
{
string s = longestPalindrome("a");
return 0;
}
string longestPalindrome(string s) {
if (s.empty()) return "";
if (s.size() == 1) return s;
int min_start = 0, max_len = 1;
for (int i = 0; i < s.size();) {
if (s.size() - i <= max_len / 2) break;
int j = i, k = i;
while (k < s.size()-1 && s[k+1] == s[k]) ++k; // Skip duplicate characters.
i = k+1;
while (k < s.size()-1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } // Expand.
int new_len = k - j + 1;
if (new_len > max_len) { min_start = j; max_len = new_len; }
}
return s.substr(min_start, max_len);
}
string longestPalindrome(string s) {
if (s.empty()) return "";
if (s.size() == 1) return s;
int min_start = 0, max_len = 1;
for (int i = 0; i < s.size();) {
if (s.size() - i <= max_len / 2) break;
int j = i, k = i;
while (k < s.size()-1 && s[k+1] == s[k]) ++k; // Skip duplicate characters.
i = k+1;
while (k < s.size()-1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } // Expand.
int new_len = k - j + 1;
if (new_len > max_len) { min_start = j; max_len = new_len; }
}
return s.substr(min_start, max_len);
}string longestPalindrome(string s) {
if (s.empty()) return "";
if (s.size() == 1) return s;
int min_start = 0, max_len = 1;
for (int i = 0; i < s.size();) {
if (s.size() - i <= max_len / 2) break;
int j = i, k = i;
while (k < s.size()-1 && s[k+1] == s[k]) ++k; // Skip duplicate characters.
i = k+1;
while (k < s.size()-1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } // Expand.
int new_len = k - j + 1;
if (new_len > max_len) { min_start = j; max_len = new_len; }
}
return s.substr(min_start, max_len);
}
// leetcode5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<string>
#include<vector>
using namespace std;
bool fun(int low, int high, const char *str, int length)
{
if (length == 0 || length == 1)
return true;
if (str[low] != str[high])
return false;
return fun(low + 1, high - 1, str, length - 2);
}
string longestCommonSubstring(string s1, string s2)
{
int N = s1.size(), M = s2.size(), len = 0, r = -1;
vector<vector<int>> mem(N, vector<int>(M, 0));
for (int i = 0; i<N; ++i) {
for (int j = 0; j<M; ++j) {
if (s1[i] == s2[j]) {
mem[i][j] = (i == 0 || j == 0) ? 1 : mem[i - 1][j - 1] + 1;
if (mem[i][j] > len) len = mem[i][j], r = i;
}
else {
mem[i][j] = 0;
}
}
}
string s_result = s1.substr(r - len + 1, len);
int s_length = s_result.length();
if (fun(0, s_length-1, s_result.c_str(), s_length))
{
return s_result;
}
else
{
string tmp1 = s1.substr(r + 1 , s1.length() - r +1);
string tmp2(tmp1.rbegin(), tmp1.rend());
return longestCommonSubstring(tmp1,tmp2);
}
}
string longestPalindrome(string s)
{
if (s.empty())return NULL;
string s1(s.rbegin(), s.rend());
return longestCommonSubstring(s, s1);
}
int main()
{
string s = longestPalindrome("cltgmkogtlc");
return 0;
}
//class Solution {
//public:
// std::string longestPalindrome(std::string s) {
// if (s.size() < 2)
// return s;//特殊情况特殊处理
// int len = s.size(), max_left = 0, max_len = 1, left, right;
// for (int start = 0; start < len && len - start > max_len / 2;)
// {
// left = right = start;
// while (right < len - 1 && s[right + 1] == s[right])
// ++right;//当中间有重复时跳过
//
// start = right + 1;
//
// while (right < len - 1 && left > 0 && s[right + 1] == s[left - 1])
// {
// ++right;
// --left;
// }
//
// if (max_len < right - left + 1) {
// max_left = left;
// max_len = right - left + 1;
// }
// }
// return s.substr(max_left, max_len);
// }
//};
//bool isHuiwen(int begin, int end, const char* s)
//{
// if (end == begin || end<begin)
// {
// return true;
// }
// if (s[begin] != s[end])
// {
// return false;
// }
// return isHuiwen(begin + 1, end - 1, s);
//}
难道非得这么搞?
// leetcode5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<string>
#include<vector>
using namespace std;
int fun(int low, int high, const char *str, int length)
{
if (length == 0 || length == 1)
return 1;
if (str[low] != str[high])
return 0;
return fun(low + 1, high - 1, str, length - 2);
}
string longestCommonSubstring(string s1, string s2)
{
int N = s1.size(), M = s2.size(), len = 0, r = -1;
vector<vector<int>> mem(N, vector<int>(M, 0));
for (int i = 0; i<N; ++i) {
for (int j = 0; j<M; ++j) {
if (s1[i] == s2[j]) {
mem[i][j] = (i == 0 || j == 0) ? 1 : mem[i - 1][j - 1] + 1;
if (mem[i][j] > len) len = mem[i][j], r = i;
}
else {
mem[i][j] = 0;
}
}
}
string s_result = s1.substr(r - len + 1, len);
int s_length = s_result.length();
if (fun(0, s_length, s_result.c_str(), s_length))
{
return s_result;
}
else
{
return longestCommonSubstring(s1.substr(s_length,r + 1- s_length),s2);
}
}
string longestPalindrome(string s)
{
if (s.empty())return NULL;
string s1(s.rbegin(), s.rend());
return longestCommonSubstring(s, s1);
}
int main()
{
string s = longestPalindrome("aaa");
return 0;
}
求高手,这个判断还有点小问题