字符串分段逆序

字符串分段逆序问题, 给一个字符串 aaa–bb-ccc, 转变成 ccc-bb-aaa

  • 思路

目的, 向下分析,问自己问题, 导出解决方案

  • 把字符串分组
    处理字节数组即可, 分组的要点在于相邻的元素

  • 字符串逆序拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.luozi.string;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Created by luoziyihao on 6/22/17.
*/
public class StringReverser {
/**
* 使用字节数组的处理方式
* 先尝试理出大致思路, 找一个方向
* 在构思算法的关键点, 可以划出来
* 再边写边想
*/
public String reverseStringBySplitChar(String src, char split){
//校验src
//循环处理字符数组, 将里面的char按照 split分别放在好几个String中
//关键点是比较相邻的两个字符
char[] arrs = src.toCharArray();
List<String> lists = new ArrayList<String>();
int length = arrs.length;
StringBuilder builder = new StringBuilder();
for(int i = 0; i < length; i++) {
char nowChar = arrs[i];
if (i == 0) {
builder.append(nowChar);
continue;
}
char lastChar = arrs[i-1];

// 在循环中拼装出具体的子串, 子串的结束时机用isSplitStringEnd控制
boolean isSplitAfterString = lastChar != split && nowChar == split;
boolean isStringAfterSplit = lastChar == split && nowChar != split;
if (isSplitAfterString || isStringAfterSplit) {
lists.add(builder.toString());
builder = new StringBuilder();
}
builder.append(nowChar);

}
lists.add(builder.toString());
Collections.reverse(lists);
return appendString(lists);
}

private String appendString(List<String> lists) {
StringBuilder builder = new StringBuilder();
for (String str : lists) {
builder.append(str);
}
return builder.toString();

}
}