C#で実装された次の2つのメソッドがあります
private static string FindLongestPalindrome(string s)
{
string largest = "";
for (int i = 1; i < s.Length-1; i++)
{
for (int j = i+1; j <= s.Length; j++)
{
if (IsPalindrome(s.Substring(i, j)))
{
largest = s.Substring(i, j);
}
}
}
return largest;
}
private static bool IsPalindrome(string s)
{
bool isPalindrome = true;
int j = s.Length-1;
for (int i = 0; i < s.Length; i++)
{
if (s[i].ToString().ToLower() != s[j].ToString().ToLower())
{
isPalindrome = false;
break;
}
j--;
}
return isPalindrome;
}
IsPalindrome
文字列が回文かどうかをチェックFindLongestPalindrome
し、文字列内で最も長い回文を見つけます。はい、私FindLongestPalindrome
はそれが最も効率的ではなく、二次であることを認識しています。ただ、現時点では気にしていません。次の時点で、プログラムが境界を超えて例外をスローし続ける理由を知りたいだけです。
if (IsPalindrome(s.Substring(i, j))) {...}
すべての文字列入力に対してコードが範囲外にならないように、この部分を変更するにはどうすればよいですか?