#https://redd.it/c1yls0
public static string LongestPalindrome(string input)
{
if (input == null || input.Length == 0)
{
//Don't bother doing anything if length is zero
return "";
}
//Maximum palindrome length so far
int max = -1;
//Longest palindrome so far
string longest = "";
//Possible palindrome we are checking
string palindrome;
for (int i = 0; i < input.Length; i++)
{
//Use lastIndexOf as start value of loop
for (int j = input.LastIndexOf(input[i]); j > i; j--)
{
int length = j + 1 - i;
//Check max length in the outer condition to avoid substring (it's expensive)
if (length > max && input[i] == input[j])
{
//Substring in C# is (start,length) not (start,end)
palindrome = input.Substring(i, length);
if (palli(palindrome))
{
max = length;
longest = palindrome;
break;
}
}
}
}
//Ternery operator: d=a?b:c
//Classic: if(a){d=b;}else{d=c;}
return longest.Length > 0 ? longest : input.Substring(0, 1);
}
//Changed to bool
private static bool palli(string k)
{
char[] str = k.ToCharArray();
int n = k.Length;
//You don't need to run through the entire string,
//just the first half (n/2)
for (int i = 0; i < n / 2; i++)
{
if (str[i] != str[n - i - 1])
{
//Return failure directly
//and don't bother completing the loop
return false;
}
}
return true;
}
Comments
0 B
|👍
/👎