Пример #1
0
        public int PalindromePartition(string s, int k)
        {
            ProbInfo[,] probInfos             = new ProbInfo[s.Length, k + 1];
            PalindromeInfo[,] palindromeInfos = new PalindromeInfo[s.Length, s.Length];

            return(PalindromePartitionAux(0, k, s, probInfos, palindromeInfos));
        }
Пример #2
0
        private int PalindromePartitionAux(int index, int k, string s, ProbInfo[,] probInfos, PalindromeInfo[,] palindromeInfos)
        {
            if (k == 0)
            {
                return(0);
            }

            if (probInfos[index, k] != null)
            {
                return(probInfos[index, k].Result);
            }

            probInfos[index, k] = new ProbInfo();

            int result = int.MaxValue;

            if (k == 1)
            {
                result = MiniPalindrome(index, s.Length - 1, s, palindromeInfos);
            }
            else
            {
                int maxIndex = s.Length - 1 - (k - 1);


                for (int j = index; j <= maxIndex; j++)
                {
                    var currentResult = MiniPalindrome(index, j, s, palindromeInfos);
                    currentResult += PalindromePartitionAux(j + 1, k - 1, s, probInfos, palindromeInfos);

                    if (currentResult < result)
                    {
                        result = currentResult;
                    }
                }
            }

            probInfos[index, k].Result = result;
            return(result);
        }