旋转字符串

唉,写在开头,字符串String的几个方法总是弄混淆。

String.copyValueOf(char[] data),用来返回字符串,即数组转化为字符串对象。

String.charAt(int index) ,此方法返回指定索引处的char值.

String.indexOf(int ch) ,此方法返回在此字符串中第一次出现的指定字符索引

String.valueOf(object a),根据a的类型返回该类型的参数

。。。。。

  如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。

  给定两个字符串AB及他们的长度lenalenb,请返回一个bool值,代表他们是否互为旋转词。

测试样例:
"cdab",4,"abcd",4
返回:true

  之前的想法是,两个字符串自身分别相向挪动,比如有两个字符串,abcd和cdab,然后各自分别挪动,变为bcda和bcda,然后比较两者是否相等,但是有考虑到特殊情况,
比如双方只有两个字符,则分别挪动则会判断出错,因此次方法不适用。因此采用只有一个字符串挪动。接下来就是挪动的方式选择,之前想到一个字符串的第一位要移动到最后一位,
想利用队列实现,可是发觉这样比较两个字符串是否相等又有问题,因此队列的方式不适用。最后就选择直接用字符串拼接的方式。
代码:


 1 import java.util.*;
 2 
 3 public class test {
 4     public static boolean chkRotation(String A, int lena, String B, int lenb) {
 5         // write code here
 6         int i;
 7         if(lena!=lenb){    //首先长度判断
 8             return false;
 9         }
10         else{
11             int flag=CheckSingle(A,B);    //第一次不挪位直接比较看是否相等
12             String temp = null;
13             if(flag!=1){
14                 temp=A.substring(0, lena);  //想不到好的方式把A的字符串复制给另一个字符串,就用了subsring()
15                 for(i=1;i<lena;i++){
16                     temp=temp.substring(1, lena)+temp.substring(0,1);    //字符串拼接,上一次temp字符串的后lena-1位拼接上temp的第一位,即完成了挪位
17                     if(CheckSingle(temp,B)==1){
18                         return true;
19                     }    
20                 }
21                 return false;
22             }
23             else return true;
24         }
25     }
26         
27     public static int CheckSingle(String A,String B){
28         if(A.equals(B)){
29             return 1;
30         }
31         else return 0;
32     }
33     public static void main(String[] args){
34         if(chkRotation("dbc",3,"bcd",3))
35             System.out.println("yes");
36         else System.out.println("no");
37     }
38 }

 

后记:
之前一直纠结对象复制的问题,后来看到一篇博客,原来还是有比较好的方法的。所有的对象都是Object的子类,而Obejct就有一个克隆的方法。
但是因为该方法是protected,所以都不能在类外进行访问。因此,需要覆盖该方法。
 1 public class Student implements Cloneable{
 2     public Object Clone(){
 3         Student stu=null;
 4         try{
 5             stu= (Student)super.clone();
 6         }
 7         catch(CloneNotSupportedException e) {  
 8             e.printStackTrace();  
 9         }  
10         return stu;
11     }
12 }

 








posted @ 2016-03-15 19:38  jeyfang  阅读(382)  评论(0编辑  收藏  举报