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

       翻转两次,第一次翻转整个字符串,第二次翻转单词。

代码实现:

public class Solution{
      public static void reverse(char[] arr,int start,int end){
            if(arr==null||arr.length<0||start<0||end>=arr.length){
                 return;
            }
            while(start<end){
                 char temp=arr[start];
                 arr[start]=arr[end];
                 arr[end]=temp;
                 start++; 
                 end--;
            }
      }
      
      public static String reverseSentence(char[] data){
            if(data==null||data.length==0){
                 return "";
            }
            int start=0;
            int end=data.length-1;
            //整个字符串逆转
            reverse(data,start,end);
            start=0;
            end=start;
            //逆转单词字符串,当最后一个单词后没有' ',并没有执行逆转
            for(int i=0;i<data.length;i++){     
                if(data[i]==' '){
                     end=i-1;
                     reverse(data,start,end);    
                     start=i+1;                
                }
            }
            //最后逆转最后一个单词字符串
            reverse(data,start,data.length-1);
            return String.valueOf(data);
      }

      public static void main(String[] args){
             String str="I am a student!";
             char[] chArray=str.toCharArray();
             String s=reverseSentence(chArray);
             System.out.println(s);
      }
}

        题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串“abcdefg”和数字2,该函数将返回左旋转2位得到的结果“cdefgab”。

代码实现:

public class Solution{
     public static void reverse(char[] array,int start,int end){
          while(start<end){
                char temp=array[start];
                array[start]=array[end];
                array[end]=temp;
                end--;
                start++;
          }
     }

      public static void leftRotateString1(char[] array,int n){
          if(array==null||array.length==0||n<0||n>=array.length){
              return;
          }
          int length=array.length;
          reverse(array,0,n-1);
          reverse(array,n,length-1);
          reverse(array,0,length-1);
      }

      public static String leftRotateString2(String s,int n){
          if(s==null||s.length()==0||n<0||n>=s.length()){
              return "";
          }
          return s.substring(n,s.length())+s.substring(0,n);
      }

      public static String leftRotateString3(String s,int n){
          if(s==null||s.length()==0||n<0||n>=s.length()){
              return "";
          }
          char[] array=s.toCharArray();
          StringBuilder sb=new StringBuilder();
          for(int i=n;i<array.length;i++){
              sb.append(array[i]);
          }
          for(int i=0;i<n;i++){
              sb.append(array[i]);
          }
          return sb.toString();
      }

      public static String leftRotateString4(String s,int n){
          if(s==null||s.length()==0||n<0||n>=s.length()){
              return "";
          }
          int length=s.length();
          s+=s;
          return s.substring(n,n+length);
      }
      

     public static void main(String[] args){
           String s="abcdefg";
           char[] array=s.toCharArray();
           leftRotateString1(array,2);
           String s1=String.valueOf(array);
           System.out.println(s1);
           String s2=leftRotateString2(s,2);
           System.out.println(s2);
           String s3=leftRotateString3(s,2);
           System.out.println(s3);
           String s4=leftRotateString4(s,2);
           System.out.println(s4);
     }
}

 

 posted on 2018-11-27 22:39  会飞的金鱼  阅读(160)  评论(0)    收藏  举报