关于字符串反转的问题 例如:1、ABCFECBA 返回 ABC2、ABA 返回 ABA3、ABC 返回 A4、ABCDFEEFCBA 返回 ABC 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 无配置向导用一个for循环守卫判断。。还是等高手生成令人激动的代码吧 //以下只是大概思路,可能会有错的地方String str == "ABCDFEEFCBA ";StringBuilder sb = new StringBuilder(str);String strTemp = sb.reverse().toString();//abc 则返回的是cbaif(str.equals(strTemp)){//你说的第二种情况、但是不知道abba这种是不是也返回 return strTemp ;}else{//思路:str = ABCFECBA; reverse() 后:str2 = ABCEFCBA;//依次逐个比较,只要有一个不等,则不是需要返回的字符,如果依次相等,则是要反回的字符,//但是只需要比较到一般的位置(strBytes.length/2),ABCDDCBA,ABCDCBA这两种要区分一下。StringBuilder sb2 = new StringBuilder();int len = str.length();byte[] strBytes = str.getBytes();byte[] strTempBytes = str.getBytes();boolean falg = false;for(int i=0;i<strBytes.length/2;i++){ if(strBytes[i] != strTempBytes[i]){ flag = true; } if(strBytes[i]==strTempBytes[i] && flaf == false){ sb2.append(strBytes[i]); }}} 我想到一个思路 不知道能不能帮助你:我觉得查找算法中有个二分查找时候这种情况str1 ABCDEFCBA 倒转得到 str2 =ABCFEDCBA 将str1 中间截断 得到前半截 ABCD 看看 str2.startWith('ABCD');这样来 递归就行了 我个人认为比较快 public class StringDemo{ public static void main(String[] args) { System.out.println("ABCFECBA" + "\t返回\t" + getStr("ABCFECBA")); System.out.println("ABA" + "\t\t返回\t" + getStr("ABA")); System.out.println("ABC" + "\t\t返回\t" + getStr("ABC")); System.out.println("ABCDFEEFCBA" + "\t返回\t" + getStr("ABCDFEEFCBA")); } static String getStr(String str) { return str.substring(0,getPos(str,0,str.length() - 1)); } static int getPos(String str,int low, int high) { int left = low, right = high; while(left < right) { char lc = str.charAt(left); char rc = str.charAt(right); if(lc != rc) return left == 0 ? 1 : left; left ++; right --; } if(left >= right) return high + 1; return left == 0 ? 1 : left; }}运行结果: 求这个Java EE期末考试试题 项目打jar包分层发布问题 急需要处理的问题 spring事务 Struts的配置不正确问题 菜鸟问题:STRING与STRINGBUFFER的区别? jboss下部署问题 100分求救~~安装eclipse tomcat插件后,访问所有JSP页面全部空白,无法显示 jdk1.3.1下载网址好象没有看到了,谁可以提供吗? s:iterator无法将LIST里面的对象在jsp显示出来 分不多但还是请大家看一下!<a href="" onclick="checkuser">调用不了函数时为什么 tomcat无法解析jsp文件
//以下只是大概思路,可能会有错的地方
String str == "ABCDFEEFCBA ";
StringBuilder sb = new StringBuilder(str);
String strTemp = sb.reverse().toString();//abc 则返回的是cba
if(str.equals(strTemp)){//你说的第二种情况、但是不知道abba这种是不是也返回
return strTemp ;
}else{
//思路:str = ABCFECBA; reverse() 后:str2 = ABCEFCBA;
//依次逐个比较,只要有一个不等,则不是需要返回的字符,如果依次相等,则是要反回的字符,
//但是只需要比较到一般的位置(strBytes.length/2),ABCDDCBA,ABCDCBA这两种要区分一下。StringBuilder sb2 = new StringBuilder();int len = str.length();
byte[] strBytes = str.getBytes();
byte[] strTempBytes = str.getBytes();
boolean falg = false;
for(int i=0;i<strBytes.length/2;i++){
if(strBytes[i] != strTempBytes[i]){
flag = true;
}
if(strBytes[i]==strTempBytes[i] && flaf == false){
sb2.append(strBytes[i]);
}
}}
str1 ABCDEFCBA 倒转得到 str2 =ABCFEDCBA 将str1 中间截断 得到前半截 ABCD 看看 str2.startWith('ABCD');这样来 递归就行了 我个人认为比较快
{
public static void main(String[] args)
{
System.out.println("ABCFECBA" + "\t返回\t" + getStr("ABCFECBA"));
System.out.println("ABA" + "\t\t返回\t" + getStr("ABA"));
System.out.println("ABC" + "\t\t返回\t" + getStr("ABC"));
System.out.println("ABCDFEEFCBA" + "\t返回\t" + getStr("ABCDFEEFCBA"));
}
static String getStr(String str)
{
return str.substring(0,getPos(str,0,str.length() - 1));
}
static int getPos(String str,int low, int high)
{
int left = low, right = high;
while(left < right)
{
char lc = str.charAt(left);
char rc = str.charAt(right);
if(lc != rc)
return left == 0 ? 1 : left;
left ++;
right --;
}
if(left >= right)
return high + 1;
return left == 0 ? 1 : left;
}
}运行结果: