美文网首页
《剑指offer第二版》面试题58:翻转字符串(java)

《剑指offer第二版》面试题58:翻转字符串(java)

作者: castlet | 来源:发表于2020-02-29 13:07 被阅读0次

    题目描述

    • 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。

    解题思路

    1. 先将整个字符串整体翻转。得到".tneduts a ma I"。
    2. 再将句子中每个单词的字符顺序翻转,得到"student. a am I"。
    void reverse(char[] chars, int start ,int end) {
        if (chars == null || start >= end || end >= chars.length) {
            return;
        }
        while (start < end) {
            char tmp = chars[start];
            chars[start] = chars[end];
            chars[end] = tmp;
            start ++;
            end --;
        }
    }
    // 翻转字符串
    String revertSentence(String str) {
        if (str == null || str.length() <= 0) {
            return str;
        }
        char[] charArray = str.toCharArray();
        reverse(charArray, 0, charArray.length - 1);
    
        int start = 0;
        int end  = 0;
    
        while (start < charArray.length && end < charArray.length) {
            while (start < charArray.length && charArray[start] == ' ') {
                start ++;
            }
            end = start + 1;
            while (end < charArray.length && charArray[end] != ' ' ) {
                end ++;
            }
            reverse(charArray, start, end - 1);
            start = end;
        }
    
        return new String(charArray);
    }
    

    相关文章

      网友评论

          本文标题:《剑指offer第二版》面试题58:翻转字符串(java)

          本文链接:https://www.haomeiwen.com/subject/yzjphhtx.html