码迷,mamicode.com
首页 > 其他好文 > 详细

第3章 结构之法——字符串移位包含的问题

时间:2015-07-15 22:17:21      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

字符串移位包含的问题

问题描述

技术分享

分析与解法

【解法一】

技术分享

具体代码如下:

 1 package chapter3jiegouzhifa.QuestionOfStringMove;
 2 /**
 3  * 字符串移位包含的问题
 4  * 【解法一】
 5  * @author DELL
 6  *
 7  */
 8 public class StringMove {
 9     /**
10      * 寻找移位后的字串(左移)
11      * @param src 源字符串
12      * @param des 要查找的子串
13      * @return
14      */
15     public static boolean findSubStr(String src1, String des){
16         char[] src = src1.toCharArray();
17         int n = src.length;
18         for(int i=0;i<n;i++){
19             StringBuffer sb = new StringBuffer();  //用于存放移位后的字符串
20             char temp = src[0];
21             for(int j=0;j<n-1;j++){
22                 src[j] = src[j+1];
23                 sb.append(src[j+1]);
24             }
25             src[n-1] = temp;
26             sb.append(temp);
27             //判断是否包含
28             if(sb.toString().contains(des))
29                 return true;
30         }
31         return false;
32     }
33     public static void main(String[] args) {
34         String src = "AABCD";
35         String des = "CDAA";
36         if(findSubStr(src,des))
37             System.out.println("可以通过循环移位得到!");
38         else
39             System.out.println("不可以通过循环移位得到!");
40     }
41 
42 }

程序运行结果如下:

可以通过循环移位得到!

【解法二】

技术分享

技术分享

这种解法存在一个bug:s1="A", s2="AA". 解决办法:先比较一下长度。

具体代码如下:

 

 1 package chapter3jiegouzhifa.QuestionOfStringMove;
 2 /**
 3  * 字符串移位包含的问题
 4  * 【解法二】
 5  * @author DELL
 6  *
 7  */
 8 public class StringMove2 {
 9     /**
10      * 寻找移位后的字串(左移)
11      * @param src 源字符串
12      * @param des 要查找的子串
13      * @return
14      */
15     public static boolean findSubStr(String src, String des){
16         if(src.length()<des.length())
17             return false;
18         StringBuffer sb = new StringBuffer(); 
19         sb.append(src);
20         sb.append(src);
21         //判断是否包含
22         if(sb.toString().contains(des))
23             return true;
24         else
25             return false;
26     }
27     public static void main(String[] args) {
28         String src = "AABCD";
29         String des = "CDAA";
30         if(findSubStr(src,des))
31             System.out.println("可以通过循环移位得到!");
32         else
33             System.out.println("不可以通过循环移位得到!");
34     }
35 
36 }

程序运行结果如下:

可以通过循环移位得到!

总结

  第二种方法利用了“提高空间复杂度来换取时间复杂度的降低”的思路,适用于对时间复杂度要求高的场合。

 

第3章 结构之法——字符串移位包含的问题

标签:

原文地址:http://www.cnblogs.com/gaopeng527/p/4649616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!