Verson1.0 Build02(不好意思,第一段算法有问题,请看第二段。第一段算法的思想是遇到成对的间隔符才开始转换,若间被间隔的字段是奇数则会有问题,没考虑到末尾的情况,也就是有可能最后个需要转换的字符串没有执行,第二段算法处理了这个问题,若再有BUG请大家指出,多谢。)
字符串反转看似一道非常普通的算法但是深入研究却有趣味。见上一篇《字符串反转》。本篇的算法是带有分隔符的字符串反转问题(分隔符跳过)。详细见代码,共同讨论研究,请不吝评论!
JAVA实现,代码如下:
实现算法1:
package com.main;
public class Main {
public static void main(String[] args){
String str=" This is a reverse test ";
ReversString reverse= new ReversString();
System.out.println("befor reverse str ="+str);
System.out.println("after reverse str ="+reverse.reverseStrExceptSeprator(str,' '));
}
}
package com.main;
public class ReversString {
public String reverseStrExceptSeprator(String _str,char seprator){
int start=0;
char[] charArray=_str.toCharArray();
for(int i=0;i<charArray.length;i++){
if(charArray[i]==seprator){
if(i==0){
start=i+1;
continue;
}
int tempStart=start;
int tempEnd=i-1;
while(tempEnd>tempStart){
char temp=charArray[tempStart];
charArray[tempStart]=charArray[tempEnd];
charArray[tempEnd]=temp;
tempStart++;
tempEnd--;
}
start=i+1;
}else{
continue;
}
}
return new String(charArray);
}
}
算法2:思路同上一个,这里修复了一BUG(最后一个未被转换).
public String reverseStrExceptSeprator(String _str,char seprator){
int start=0;
char[] charArray=_str.toCharArray();
for(int i=0;i<charArray.length;i++){
if(charArray[i]==seprator||i==charArray.length-1){ //最后一个的问题
if(i==0){
start=i+1;
continue;
}
int tempStart=start;
int tempEnd;
if(i!=charArray.length-1){
tempEnd=i-1;
}else{
tempEnd=i;
}
while(tempEnd>tempStart){
char temp=charArray[tempStart];
charArray[tempStart]=charArray[tempEnd];
charArray[tempEnd]=temp;
tempStart++;
tempEnd--;
}
start=i+1;
}else{
continue;
}
}
return new String(charArray;
}