频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
字符串包含问题的求解
2012-10-17 13:35:54      个评论      
收藏   我要投稿

我们在参加笔试或者写代码的时候总会与字符串打交道,今天主要想说的是如何解决字符串包含的问题。

问题是,给你一个字符串然后让你循环移位能否得到一个给定的字符串,比如给你ABCDE 能否将其进行移位得到CDEA,这样的问题。

遇到这样的 问题我们可能第一件事就是对其进行循环移位,这个方法是没有问题的,但是我们想想如果字符串很长很长,那么我们的效率是不是会很高呢?时间复杂度应该为字符串的长度。这样肯定效率不是很高的。下面我们来进行分析。

ABCDE进行移位得到的结果为:

            ABCDE ->BCDEA -> CDEAB -> DEABC -> EABCD -> ABCDE

我们这样来看,

            BCDEA = ABCDE ABCDE 去掉前面的A字母和后面的BCDE字母

            CDEAB = ABCDE ABCDE 去掉前面的AB字母和后面的CDE字母

            同理。。。。。。。。

我们发现不管怎么旋转ABCDE都是可以由ABCDEABCDE截取下来得到的。

所以我们的问题也就解决了,我们把原来的字符串进行相叠加,也就是将ABCDE叠加为ABCDEABCDE,这样我们在判断移位得到子串的时候就直接进行判断是否包含就可以知道能不能从原来的字符串移位得到了。

所以这样的一个方法就使我们的程序变得非常的简单了。

下面是一个简单的例子来说明下:

[java] 
package testString; 
 
public class TestString { 
 
    /**
     * @param args
     */ 
    public static boolean isContent(String str1,String str2) 
    { 
        //str1为原来的字符串,str2为能否得到的字符串 
        String tem  = str1+ str1; 
        boolean result = tem.contains(str2); 
        return result; 
    } 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        String str1 = "ABCDE"; 
        String str2 = "CDEA"; 
        System.out.println(isContent(str1, str2)); 
    } 
 

得到的结果为:

true

 

所以我们这样就不需要循环就OK了。既简单有提高了效率。

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 字符串 问题
上一篇:节俭的c/c++和挥霍的java/c#
下一篇:java速成
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站