在 Java 中的字符串数组中查找回文

Find Palindromes in an array of strings in Java

您好,我正在尝试在字符串数组中查找回文。 我已经尝试过 O(n2) 时间复杂度的蛮力方法

 for(int i=0;i<s.length;i++) {
            for(int j=i+1;j<s.length;j++) {
                if(s[i] == reverse(s[j])) {
                    count++;
                }
            }
        }

我正在寻找一种不使用散列且具有 O(n) 时间复杂度或更好时间复杂度的解决方案。

My problem is if I am on a particular index , I have to compare the element at that index with the remaining elements .

谁能帮我解决这个问题。 TIA

你不需要使用两个 for 循环来解决这个问题。我会改用一个。

for(int i = 0; i < string.length; i++)

我们将检查该字符串中的每个项目并检查字符串末尾的相应项目是否是同一字符。所以在你的 for 循环中:

if(string.charAt(i) != string.charAt(string.length - 1 - i)
   return false;

没有位于string.length的字符,所以我减去一个得到字符串的最后一个字符。然后我减去我们的索引,这样它就会为我们提供该字符串中向前和向后的第 "i" 个字符。然后我们可以比较它们。如果它们不相等,我们就不是在看回文,可以 return 立即为假。

如果你在没有 return 为假的情况下通过完整的 for 循环,你可以 return 为真并保证此时有一个回文。

您可以在 O(n) 中检查 String 是否为 回文 或不是单循环从两端开始迭代,比如比较第一个和最后一个,第二个和倒数第二个,依此类推:-

String st1 = "RACECAR";
int flag=0;   
    for (int j=0;j<=str1.length()-1 ;j++)   
    {   
     if (st1.charAt(j)!=st1.charAt(st1.length()-j-1))   
     {   
     flag=1;   
     break;   
     }   
    }  
  if(flag==1)   
  System.out.println("String is not a palindrome");   
  else   
    System.out.println("String is a palindrome"); 

输出 :- String is a palindrome