zoukankan      html  css  js  c++  java
  • 旋转字符串

    唉,写在开头,字符串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 }
    
    
    







    jeyfang
  • 相关阅读:
    js中的数据类型和判断数据类型
    MVC,MVVM,MVP等设计模式的分析
    mvc框架详解
    插件推荐系列
    响应式区间
    js短路原理:&&, ||
    不错的表单样式
    测试ip
    Python模拟登陆万能法
    iphone 端 ipunt输入框光标偏移
  • 原文地址:https://www.cnblogs.com/jeyfang/p/5280836.html
Copyright © 2011-2022 走看看