• 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)


    //题目1:翻转单词顺序例如“Hello world!”翻转后为world! Hello。
    //思路:首先翻转整个字符串,然后再分别翻转每个单词。
    //题目2:左旋转字符串,是将字符串的前面几个(n)字符放到整个字符串的后面。例如:“helloWorld”,旋转后lloWorldhe
    //思路:将字符串分成两半分别翻转,然后整个翻转。
    public class ReverseWord {
        //翻转一个字符串
         public void reverseWord(char[] a,int start,int end){
             if(a==null)
                 return;
             while(start<end){
                 swrap(a,start,end);
                 start++;
                 end--;
             }
         }
    
        public void swrap(char[] a, int start, int end) {
             char temp=a[start];
             a[start]=a[end];
             a[end]=temp;
            
        }
        //翻转单词的顺序
        public void ReverseWordSequence(char[] a){
            if(a==null)
                return;
            reverseWord(a,0,a.length-1);
            int start=0;
            int end=0;
            while(start<a.length ){
                if(a[start]==' '){
                    start++;
                    end++;
                }
                else if(a[end]==' '){
                    reverseWord(a,start,--end);
                    start=++end;
                }
                else if(end==a.length-1){
                    reverseWord(a,start,end);//最后一个单词
                    break;
                }
                else
                end++;
            }
        }
        //左旋转字符串
        public void LeftReverseString(char[] a,int n){
            if(a==null)
                return;
            if(n<a.length&&n>0){
                int startFirst=0;
                int endFirst=n-1;
                int startSecond=n;
                int endSecond=a.length-1;
                reverseWord(a,startFirst,endFirst);
                reverseWord(a,startSecond,endSecond);
                reverseWord(a,0,a.length-1);
            }
            
        }
        public static void main(String[] args){
            String s="hello world i am love!";
            char[] a=s.toCharArray();
            ReverseWord rw=new ReverseWord();
            rw.LeftReverseString(a, a.length);
            for(char c:a)
                System.out.print(c+" ");
                System.out.println();
            rw.ReverseWordSequence(a);
            for(char c:a)
            System.out.print(c+" ");
            System.out.println();
            
        }
    }
  • 相关阅读:
    SDUT 2109 找女朋友
    Instant Complexity(模拟,递归)
    Lucky and Good Months by Gregorian Calendar(模拟)
    Wall(Graham算法)
    Beauty Contest(graham求凸包算法)
    A Round Peg in a Ground Hole(判断是否是凸包,点是否在凸包内,圆与多边形的关系)
    Pie(二分)
    Expanding Rods(二分)
    Fishnet(计算几何)
    Building a Space Station(kruskal,说好的数论呢)
  • 原文地址:https://www.cnblogs.com/hupp/p/4771464.html
Copyright © 2020-2023  润新知