剑指offer58~翻转字符串

    xiaoxiao2022-07-12  154

    ReverseWordsInSentence

    Description

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

    Solution

    两次翻转字符串。 第一步翻转:翻转句子中的所有字符。结果是连单词内部的顺序也被翻转了。 第二步翻转:仅翻转单词内部的顺序。 可以定义翻转函数,第一步翻转和第二部翻转都可以调用。

    Code

    public class P284_ReverseWordsInSentence { public static String reverse(String str){ StringBuilder stringBuilder = new StringBuilder(str); reverseSubString(stringBuilder,0,stringBuilder.length()-1); int start = 0,end = stringBuilder.indexOf(" "); while (start<stringBuilder.length()&&end!=-1){ reverseSubString(stringBuilder,start,end-1); start = end+1; //返回空格在字符串中最后一次出现的索引。 end = stringBuilder.indexOf(" ",start); } if(start<stringBuilder.length()) reverseSubString(stringBuilder,start,stringBuilder.length()-1); return stringBuilder.toString(); } //翻转stringBuilder[start,end] public static void reverseSubString(StringBuilder stringBuilder,int start,int end){ for(int i=start;i<=start+(end-start)/2;i++){ char temp = stringBuilder.charAt(i); stringBuilder.setCharAt(i,stringBuilder.charAt(end-i+start)); stringBuilder.setCharAt(end-i+start,temp); } } public static void main(String[] args){ System.out.println(reverse("I am a student.")); } }

    Appendix

    1.stringBuilder.indexOf的使用方法详见另一篇博客的表格:深入学习java源码之StringBuilder.indexOf()与StringBuilder.reverse() (转自:wespten) 2.code 16-23行是字符串的翻转,可以记住,用的时候就调出来。

    最新回复(0)