Java 使用String.reverse的最长字符串回文
我一直在试图解决一个问题,寻找最长的回文字符串。 虽然我可以通过中间元素来实现,但我想通过string.reverse来尝试: 这是我的密码: 疑问:我正在使用string.reverse查找给定字符串的反向,然后尝试比较反向字符串和输入字符串中的每个子字符串,但这不会给出最大回文,但会给出所有可能的回文。。。 另外,我在某个地方犯了一些错误,请帮助我找到Java 使用String.reverse的最长字符串回文,java,string,Java,String,我一直在试图解决一个问题,寻找最长的回文字符串。 虽然我可以通过中间元素来实现,但我想通过string.reverse来尝试: 这是我的密码: 疑问:我正在使用string.reverse查找给定字符串的反向,然后尝试比较反向字符串和输入字符串中的每个子字符串,但这不会给出最大回文,但会给出所有可能的回文。。。 另外,我在某个地方犯了一些错误,请帮助我找到 public class StringPalindrome { public static void main(String
public class StringPalindrome {
public static void main(String args[]) {
StringBuilder strBuilder = new StringBuilder("Shubham");
StringBuilder a = new StringBuilder("");
a = strBuilder.reverse(); //Reverse the string and saving it into other string
for(int i=0;i<strBuilder.length();i++){ // Loop one for begin index
for(int j=1;i<strBuilder.length() + 1;j++){ // Loop two for end index
if(a.substring(i, j).equals(strBuilder.substring(i, j))){ // comparing
System.out.println(strBuilder.substring(i, j)); //printing palindrome
}
}
}
}
public类StringPalindrome{
公共静态void main(字符串参数[]){
StringBuilder strBuilder=新StringBuilder(“Shubham”);
StringBuilder a=新的StringBuilder(“”);
a=strBuilder.reverse();//反转字符串并将其保存到其他字符串中
对于(int i=0;i=0&&right最长.length())
{
最长=回文;
}
回文=展开(字符串,i,i+1);
if(回文.length()>最长.length())
{
最长=回文;
}
}
返回时间最长;
}
公共静态void main(字符串[]args)
{
System.out.println(最长回文(“baraik”);
}
}
所以,最后我发现你在寻找字符串中最长的回文。
观察回文的基本大小写
对于任何给定的索引i(从0到字符串末尾)和j(从字符串末尾到0)
1
或2
public类StringPalindrome{
公共静态void main(字符串参数[]){
int大=0;
字符串pstr=“”;
StringBuilder str=新的StringBuilder(“aabbccababhhakllkjiooijpawan-nawap”);
对于(int i=0;i)您的问题是什么?您对“字符串的最长回文”的定义是什么?我无法理解该循环的头尾,但您的代码有很多问题。“字符串的最长回文”对我来说,这仅仅意味着将输入字符串颠倒过来,并将其固定在原始字符串的末尾。…。@T.J.Crowder:你们是来帮助还是和尚其他人的…?我的问题很简单…我找不到找到最长明文的方法,而只是能够找到回文…你能解释一下你期望的输出吗?@ShubhamKumar:我不是在嘲笑。这是真的s真的不清楚你的问题是什么。事实上,在那次评论中,你还没有问过任何问题。我尽力帮助别人(我已经回答了5000多个问题),但你最初的问题(甚至编辑)似乎归结为“请为我调试/编写此代码,”这不是SO的目的。这可能不是你真正的意思,所以请解释你认为代码应该工作的原因。解释让你困惑的是什么。
public class LongestPalindrome
{
static public String expand(String string, int a, int b)
{
if (a > b)
return null;
int left = a, right = b;
while (left >= 0 && right < string.length() && string.charAt(left) == string.charAt(right))
{
left--;
right++;
}
return string.substring(left + 1, right);
}
static public String longestPalindrome(String string)
{
if (string == null)
return null;
String longest = string.substring(0, 1);
for (int i = 0; i < string.length() - 1; i++)
{
String palindrome = expand(string, i, i);
if (palindrome.length() > longest.length())
{
longest = palindrome;
}
palindrome = expand(string, i, i + 1);
if (palindrome.length() > longest.length())
{
longest = palindrome;
}
}
return longest;
}
public static void main(String[] args)
{
System.out.println(longestPalindrome("baraik"));
}
}
public static int maxPalindrome(char ch[], int i, int j, int cache[][]) {
if (cache[i][j] != -1) {
return cache[i][j];
}
if (i == j) {
return cache[i][j] = 1;
}
if (j - i == 1) {
return cache[i][j] = (ch[i] == ch[j] ? 2 : 0);
}
int max = 0;
//easy if they are equal
if (ch[i] == ch[j]) {
int inCount = maxPalindrome(ch, i + 1, j - 1, cache);
max = inCount == 0 ? 0 : 2 + inCount;
}
//there are 2 ways to go step 3
maxPalindrome(ch, i + 1, j, cache);
maxPalindrome(ch, i, j - 1, cache);
return cache[i][j] = max;
}
public static void main(String[] args) {
String str = "abbzbasddeeaaaccffertrecca";
char ch[] = str.toCharArray();
int cache[][] = new int[ch.length][ch.length];
for (int row[] : cache) {
Arrays.fill(row, -1);
}
maxPalindrome(ch, 0, ch.length - 1, cache);
//print all the pallindromes
for (int i = 0; i < cache.length; ++i) {
for (int j = 0; j < cache.length; ++j) {
if (cache[i][j] > 0) {
System.out.println(str.substring(i, j+1) + " " + cache[i][j]);
}
}
}
}
bb 2
bzb 3
z 1
dd 2
ee 2
aa 2
aaa 3
a 1
aa 2
cc 2
ff 2
ertre 5
rtr 3
t 1
cc 2
public class StringPalindrome {
public static void main(String args[]) {
int big=0;
String pstr ="";
StringBuilder str = new StringBuilder("aabbccabbabhhakllkjiooijpawan-nawap");
for(int i=0;i<str.length()-1;i++)
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)== str.charAt(j) && pldrm(str.subSequence(i,j+1).toString()) && big<(j-i)){
pstr=str.subSequence(i,j+1).toString();
big=j-i;
}
}
System.out.println(pstr);
}
static boolean pldrm(String str){
int length=str.length()-1;
for(int i=0;i<length;i++){
if(str.charAt(i)!= str.charAt(length-i))
return false;
}
return true;
}
}