Palindrome Index

Sort by

recency

|

1099 Discussions

|

  • + 0 comments

    O(n) c++ solution:

    int palindromeIndex(string s) {
        size_t left{}, right{s.size() - 1};
    		// last occurrence 
        std::pair<int, int> index{};
        int cursor{-1};
    		// track direction pointer is moving in case of char mismatch
    		// 0: left++
    		// 1: right--
    		// 2: no solution found left-right 
        size_t counter{};
        while(left < right)
        {
            if(s[left] == s[right])
            {
                left++;
                right--;
            }
            else {
                if(counter >= 2)
                    return -1;
                else if(counter == 1)
                {
                    left = index.first;
                    right = index.second;
                    cursor = right;
                    right--;        
                }
                else {
                    index = {left, right};
                    cursor = left;
                    left++;
                }
                counter++;
            }
        }
            
        return cursor;
    }
    
  • + 0 comments

    Here is my c++ solution : explanation here https://youtu.be/QjHpvMdfnqs,

     bool isPalindrome(string s){
         string r = s;
         reverse(r.begin(), r.end());
         return s == r;
     }
    
    int palindromeIndex(string input) {
        int s, e;
        for(s = 0, e = input.size() - 1; s < e; s++, e--){
            if(input[s] != input[e]) break;
        }
        if(s >= e) return -1;
        string s1 = input, s2 = input;
        s1.erase(s1.begin() + s);
        if(isPalindrome(s1)) return s;
        s2.erase(s2.begin() + e);
        if(isPalindrome(s2)) return e;
        return -1;
    }
    
  • + 0 comments

    My Java solution:

    public static int palindromeIndex(String s) {
            //goal: find idx of char that will make str a palindrome when its removed
            if(s.length() == 1) return -1; //already a palindrome
            
            //use two pointers to iterate from left and right of str
            int left = 0, right = s.length() - 1;
            while(left < right){
               char leftChar = s.charAt(left);
               char rightChar = s.charAt(right);
               //if left pointer != right pointer, check which idx will make a palindrome if removed
               if(leftChar != rightChar){
                    if(isPalindrome(s, left + 1, right)) return left;
                    else return right;
               }
                left++;
                right--;
            }
            return -1; //str is already a palindrome
        }
        
        //uses two pointers to make sure chars are mirrored
        public static boolean isPalindrome(String s, int left, int right){
            while(left < right){
                if(s.charAt(left) != s.charAt(right)) return false; //chars arent mirrored
                left++;
                right--;
            }
            return true;
        }
    
  • + 0 comments

    the solution is: def ispalindromes(s): return s==s[::-1]

    def palindromeIndex(s): n=len(s) if ispalindromes(s): return -1

    for i in range(n//2):
        if s[i]!=s[n-i-1]:
            if ispalindromes(s[:1]+s[i+1:]):
                return i
            else:
                return n-i-1
    return -1
    
  • + 2 comments

    My Python solution doesn't pass many of the testcases! Can anyone help?

    def ispalindrome(s):
        if s[::-1] == s:
            return True
        return False
    
    def palindromeIndex(s):
        s = list(s)
        if ispalindrome(s):
            return -1
        for i in range(len(s) // 2 + 1):
            if ispalindrome(s[:i] + s[i + 1:]):
                return i
            if ispalindrome(s[:len(s) - i - 1] + s[len(s) - i:]):
                return len(s) - i - 1
        return -1