在Java中使用字符串数组查找Palindromes

时间:2015-07-24 18:16:52

标签: java arrays palindrome

您好我正在尝试在字符串数组中找到回文。 我尝试过具有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

2 个答案:

答案 0 :(得分:0)

您不需要使用两个for循环来完成此问题。我改用一个。

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

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

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

string.length上没有字符,所以我减去一个来获取字符串的最后一个字符。然后我减去了我们的索引,这样它就可以向前和向后提供该字符串中的#34; i&#34;字符。然后我们可以比较它们。如果他们不平等,我们不会在回文中查看,并且可以立即返回错误。

如果你通过完整的for循环而没有返回false,你可以返回true并保证在这一点上有一个回文。

答案 1 :(得分:0)

您可以在 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