程序员

344. Reverse String

2017-09-21  本文已影响0人  namelessEcho

charAt()返回这个位置上的code point 注意unicode码的code point 可以由不同编码集的多个code uints 构成,使用setCharAt()改变StringBuilder上对应位置的code point。String在内存中都是UNICODE code point 的表示形式,只有当需要保存或者传输时才会变换成不同的编码集。所以内存中String里的code point 都是四个字节。

PS:char 类型在java中表示为两个字节

关于java的字符串编码,java的字符串编码方式是UTF-16(心疼,当时也没有预见到世界上的文字UTF-16没有办法完全表示吧),说道UTF-16,为了表示超出范围的字符,UTF-16使用了高低代理对(Surrogate Pairs)来进行折中。
length()方法返回的是UTF-16下String的code point 数。

class Solution {
    public String reverseString(String s) {
        StringBuilder sb = new StringBuilder(s);
        int lo = 0;
        int hi =sb.length()-1;
        while(lo<=hi)
        {
            char ch = sb.charAt(lo);
            sb.setCharAt(lo,sb.charAt(hi));
            sb.setCharAt(hi,ch);
            hi--;
            lo++;
        }
        return sb.toString();
    }
}
上一篇下一篇

猜你喜欢

热点阅读