最长回文子串
时间限制:1000 ms | 内存限制:65535 KB
难度:4
描述
输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首尾不要输出多余的字符串)。输入字符串长度大于等于1小于等于5000,且单独占一行(如果有多组答案,输出第一组)。
输入
输入一个测试数据n(1<=n<=10);
随后有n行,每行有一个字符串。
输出
输出所要求的回文子串。
样例输入
1
Confuciuss say:Madam,I'm Adam.
样例输出
Madam,I'm Adam上面的是题目
以下是我的代码:import java.util.*;
public class Main { /**
* @param args
*/
public static void main(String[] args)throws Exception
{
// TODO 自动生成方法存根
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n--!=0)
{
Scanner sc2=new Scanner(System.in);
String s = sc2.nextLine();
int c=0;
int[] c1=new int[5001];
char[] c2=new char[5001];
for(int i=0;i<s.length();i++)
{
char temp=s.charAt(i);
if(Character.isLetter(temp))
{
c1[c]=i;
if(Character.isUpperCase(temp))
{
temp=Character.toLowerCase(temp);
}
c2[c++]=temp;
}
}
int begin=0;
int end=0;
int max=0;
for(int i=0;i<c;i++)
{
for(int j=i;j<c;j++)
{
boolean p=true;
for(int k=i;k<=(i+j)/2;k++)
{
if(c2[k]!=c2[j-k+i])
{
p=false;
break;
}
}
if(p)
{
if(j-i+1>max)
{
max=j-i+1;
begin=i;
end=j;
}
}
}
}
System.out.println(s.substring(c1[begin],c1[end]+1));
}
}
} 哪位大侠帮帮小弟!
时间限制:1000 ms | 内存限制:65535 KB
难度:4
描述
输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首尾不要输出多余的字符串)。输入字符串长度大于等于1小于等于5000,且单独占一行(如果有多组答案,输出第一组)。
输入
输入一个测试数据n(1<=n<=10);
随后有n行,每行有一个字符串。
输出
输出所要求的回文子串。
样例输入
1
Confuciuss say:Madam,I'm Adam.
样例输出
Madam,I'm Adam上面的是题目
以下是我的代码:import java.util.*;
public class Main { /**
* @param args
*/
public static void main(String[] args)throws Exception
{
// TODO 自动生成方法存根
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n--!=0)
{
Scanner sc2=new Scanner(System.in);
String s = sc2.nextLine();
int c=0;
int[] c1=new int[5001];
char[] c2=new char[5001];
for(int i=0;i<s.length();i++)
{
char temp=s.charAt(i);
if(Character.isLetter(temp))
{
c1[c]=i;
if(Character.isUpperCase(temp))
{
temp=Character.toLowerCase(temp);
}
c2[c++]=temp;
}
}
int begin=0;
int end=0;
int max=0;
for(int i=0;i<c;i++)
{
for(int j=i;j<c;j++)
{
boolean p=true;
for(int k=i;k<=(i+j)/2;k++)
{
if(c2[k]!=c2[j-k+i])
{
p=false;
break;
}
}
if(p)
{
if(j-i+1>max)
{
max=j-i+1;
begin=i;
end=j;
}
}
}
}
System.out.println(s.substring(c1[begin],c1[end]+1));
}
}
} 哪位大侠帮帮小弟!
Confuciuss say:Madam,I'm Adam.
Madam,I'm Adam
Confuciuss say:Madam,I'm Adam.
Madam,I'm AdamLZ想表达什么
import java.util.*;
public class Main { /**
* @param args
*/
public static void main(String[] args)throws Exception
{
// TODO 自动生成方法存根
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n--!=0)
{
Scanner sc2=new Scanner(System.in);
String s = sc2.nextLine();
int c=0;
int[] c1=new int[s.length()];
char[] c2=new char[s.length()];
for(int i=0;i<s.length();i++)
{
char temp=s.charAt(i);
if(Character.isLetter(temp))
{
c1[c]=i;
if(Character.isUpperCase(temp))
{
temp=Character.toLowerCase(temp);
}
c2[c++]=temp;
}
}
int begin=0;
int end=0;
int max=0;
for(int i=0;i<c;i++)
{
for(int j=i;j<c;j++)
{
boolean p=true;
for(int k=i;k<=(i+j)/2;k++)
{
if(c2[k]!=c2[j-k+i])
{
p=false;
break;
}
}
if(p)
{
if(j-i+1>max)
{
max=j-i+1;
begin=i;
end=j;
}
}
}
}
System.out.println(s.substring(c1[begin],c1[end]+1));
}
}
}