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
  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/jeyfang/p/5280836.html
Copyright © 2011-2022 走看看