最近新加的一道题,用C++秒过,12秒,反转字符串,思路很简单,一种暴力方法就用直接用一个新的字符串存储,然后一个一个从后往前遍历旧的字符串。第二种就是原地用2个指针从两端往中间扫描,当left指针小于right指针时,就交换两个下标对应的值,否则就跳出循环。两种方法都是12ms过。同学用java做的时候遇到了坑,time limit exceed,好像是对于回车换行的情况,java的string支持的不行。只能先用toCharArray转换为用char数组,然后就好了。
1.最简单的方法:
public static String reverse1(String str)
{
return new StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public static String reverse3(String s)
{
char[] array = s.toCharArray();
String reverse = ""; //注意这是空串,不是null
for (int i = array.length - 1; i >= 0; i--)
reverse += array[i];
return reverse;
}
3.常用方法的变形:
public static String reverse2(String s)
{
int length = s.length();
String reverse = ""; //注意这是空串,不是null
for (int i = 0; i < length; i++)
reverse = s.charAt(i) + reverse;//在字符串前面连接, 而非常见的后面
return reverse;
}
4.C语言中常用的方法:
public static String reverse5(String orig)
{
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i <= halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s); //知道 char数组和String相互转化
}