讨论/《画解剑指 Offer》 - 剑指 Offer 58 - I. 翻转单词顺序 - 解决方案/
《画解剑指 Offer》 - 剑指 Offer 58 - I. 翻转单词顺序 - 解决方案
共 5 个回复

有用java自己写的么? /无聊到头疼...

public String reverseWords(String s) {
    char[] array = new char[s.length()];

    int idx = 0, j = array.length - 1;
    char c;
    while (j >= 0) {
        c = s.charAt(j);
        if (c != ' ') {
            int end = j;
            if (idx > 0) {
                array[idx++] = ' ';
            }
            do {
                array[idx++] = c;
                j--;
            } while (j >= 0 && (c = s.charAt(j)) != ' ');
            // 反转[idx-(end-j),idx-1],其中end-j是长度
            int p = idx-end+j, q = idx-1;
            while(p < q) {
                char temp = array[p];
                array[p] = array[q];
                array[q] = temp;
                p++;
                q--;
            }
        }
        j--;
    }
    return new String(array, 0, idx);
}
1

使用 StringBuilder 或 StringBuffer,StringBuilder 是非线程安全的数据结构,因此多线程场景下请使用 StringBuffer。由于 StringBuilder 不考虑线程安全,因此速度更快。

1

打卡
image.png

1

我写的好复杂

class Solution {
    public String reverseWords(String s) {
        char[] c = s.toCharArray();  // 先将s转换成字符数组
        List<String> lst = new ArrayList<>();  // 用于存储所有字符串
        StringBuilder str = new StringBuilder();  // 存储每个字符串
        int cur = 0;  // 游标
        while (cur < c.length) {
            for (int i = cur;i < c.length;i++) {
                if (c[i] != ' ') {
                    str.append(c[i]);
                    if (i == c.length - 1) {
                        lst.add(str.toString());  // 将每个字符串添加到List中
                        str.delete(0, str.length());  // 清空str
                        cur = ++i;
                    }
                    continue;
                }
                if (str.length() > 0) {
                    lst.add(str.toString());  // 将每个字符串添加到List中
                    str.delete(0, str.length());  // 清空str
                    cur = i;
                }
                cur++;
                break;
            }
        }
        for (int j = lst.size() - 1;j >= 0;j--) {
            str.append(lst.get(j));
            if (j != 0) {
                str.append(' ');
            }
        }
        return str.toString();
    }
}

java的字符串拼接直接用string吗。。。