比如”abcdef“反转后为“fedcba”,最重要的是时间和空间复杂度的优化。
我的想法是,设置循环,从0开始,到字符串长度的一半,遍历,将第一个和第length-i-1个互换,交换的方法采用不引入第三方的方法,但是整形数据可以采用(a,b,a=a+b,b=a-b,a=a-b),但是字符的话就不会了,求解。
java 实现字符串反转,要求时间和空间复杂度最优
答案:6 悬赏:50
解决时间 2021-03-14 20:05
- 提问者网友:沉默的哀伤
- 2021-03-14 13:15
最佳答案
- 二级知识专家网友:开心就好
- 2021-03-14 14:36
不知为何你有这种想法,如果有好的算法可以和我讨论下,下面我写了2个代码希望能帮到你。
package app;
public class TransDemo {
//abcdef“反转后为“fedcba
public static void main(String[] args){
String str = "abcdef";
char[] ary = str.toCharArray();
for(int i = 0; i< str.length()/2; i++){
int temp = ary[ary.length-i-1]-ary[i];
ary[i] += temp;
ary[ary.length-i-1] -=temp;
}
str = new String(ary);
System.out.println(str);
}
}
package app;
public class TransDemo {
//abcdef“反转后为“fedcba
public static void main(String[] args){
String str = "abcdef";
char[] ary = str.toCharArray();
for(int i = 0; i< str.length()/2; i++){
char c = ary[i];
ary[i] = ary[str.length()-1-i];
ary[str.length()-1-i] = c;
}
str = new String(ary);
System.out.println(str);
}
}
package app;
public class TransDemo {
//abcdef“反转后为“fedcba
public static void main(String[] args){
String str = "abcdef";
char[] ary = str.toCharArray();
for(int i = 0; i< str.length()/2; i++){
int temp = ary[ary.length-i-1]-ary[i];
ary[i] += temp;
ary[ary.length-i-1] -=temp;
}
str = new String(ary);
System.out.println(str);
}
}
package app;
public class TransDemo {
//abcdef“反转后为“fedcba
public static void main(String[] args){
String str = "abcdef";
char[] ary = str.toCharArray();
for(int i = 0; i< str.length()/2; i++){
char c = ary[i];
ary[i] = ary[str.length()-1-i];
ary[str.length()-1-i] = c;
}
str = new String(ary);
System.out.println(str);
}
}
全部回答
- 1楼网友:一场云烟
- 2021-03-14 19:03
这道题考的是字符串的算法 洗牌算法
思路大概是:令A = " ab " B = " cdef " C = " abcdef "
则 A' = " (ab)' " = " ba " B' = " (cdef)' " = " fedc "
故 由线代里矩阵转置的定理可得:
C' = (AB)' = B'A' = fedcba
算法不用多说了吧,Java里由反转的方法,可以直接引用。重点是了解一下洗牌算法最简单的一个例子。
- 2楼网友:如果这是命
- 2021-03-14 18:14
char 就是 int。无所谓文字还是数字
- 3楼网友:茫然不知崩溃
- 2021-03-14 18:05
char c1='a';
char c2='b';
c1=c1+=c2;
c2=(char)(c1-c2);
c1=c1-=c2;
- 4楼网友:气场征服一切
- 2021-03-14 16:43
StringBuffer和StringBuilder都自带反转的方法reverse(),再toString()即可。
- 5楼网友:虚伪的现实
- 2021-03-14 15:23
不知为何你有这种想法,如果有好的算法可以和我讨论下,下面我写了2个代码希望能帮到你
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯