1.将一个字符串进行反转。将字符串中指定部分进行反转。

 public class StringDemo {
     //方式一:转换为char[]
     public String reverse(String str,int startIndex,int endIndex){

         if(str != null){
             char[] arr = str.toCharArray();
             for(int x = startIndex,y = endIndex;x < y;x++,y--){
                 char temp = arr[x];
                 arr[x] = arr[y];
                 arr[y] = temp;
             }

             return new String(arr);
         }
         return null;
     }

     //方式二:使用String的拼接
     public String reverse1(String str,int startIndex,int endIndex){
         if(str != null){
             //第1部分
             String reverseStr = str.substring(0,startIndex);
             //第2部分
             for(int i = endIndex;i >= startIndex;i--){
                 reverseStr += str.charAt(i);
             }
             //第3部分
             reverseStr += str.substring(endIndex + 1);

             return reverseStr;

         }
         return null;
     }
     //方式三:使用StringBuffer/StringBuilder替换String
     public String reverse2(String str,int startIndex,int endIndex){
         if(str != null){
             StringBuilder builder = new StringBuilder(str.length());

             //第1部分
             builder.append(str.substring(0,startIndex));
             //第2部分
             for(int i = endIndex;i >= startIndex;i--){

                 builder.append(str.charAt(i));
             }
             //第3部分
             builder.append(str.substring(endIndex + 1));

             return builder.toString();
         }
         return null;

     }

     @Test
     public void testReverse(){
         String str = "abcdefg";
         String reverse = reverse2(str, 2, 5);
         System.out.println(reverse);
     }

 }

2.获取一个字符串在另一个字符串中出现的次数。

 public class StringDemo {
     public int getCount(String mainStr,String subStr){
         int mainLength = mainStr.length();
         int subLength = subStr.length();
         int count = 0;
         int index = 0;
         if(mainLength >= subLength){
             //方式一:
 //            while((index = mainStr.indexOf(subStr)) != -1){
 //                count++;
 //                mainStr = mainStr.substring(index + subStr.length());
 //            }
             //方式二:对方式一的改进
             while((index = mainStr.indexOf(subStr,index)) != -1){
                 count++;
                 index += subLength;
             }

             return count;
         }else{
             return 0;
         }
     }

     @Test
     public void testGetCount(){
         String mainStr = "abkkcadkabkebfkaabkskab";
         String subStr = "ab";
         int count = getCount(mainStr, subStr);
         System.out.println(count);
     }
 }

3.获取两个字符串中最大相同子串。

 public class StringDemo2 {
     //前提:两个字符串中只有一个最大相同子串
     public String getMaxSameString(String str1,String str2){
         if(str1 != null && str2 != null){
             String maxStr = (str1.length() >= str2.length())? str1 : str2;
             String minStr = (str1.length() < str2.length())? str1 : str2;
             int length = minStr.length();

             for(int i = 0;i < length;i++){
                 for(int x = 0,y = length - i;y <= length;x++,y++){
                     String subStr = minStr.substring(x,y);
                     if(maxStr.contains(subStr)){
                         return subStr;
                     }

                 }
             }

         }
         return null;
     }

     // 如果存在多个长度相同的最大相同子串
     // 此时先返回String[],后面可以用集合中的ArrayList替换,较方便
     public String[] getMaxSameString1(String str1, String str2) {
         if (str1 != null && str2 != null) {
             StringBuffer sBuffer = new StringBuffer();
             String maxString = (str1.length() > str2.length()) ? str1 : str2;
             String minString = (str1.length() > str2.length()) ? str2 : str1;

             int len = minString.length();
             for (int i = 0; i < len; i++) {
                 for (int x = 0, y = len - i; y <= len; x++, y++) {
                     String subString = minString.substring(x, y);
                     if (maxString.contains(subString)) {
                         sBuffer.append(subString + ",");
                     }
                 }
 //                System.out.println(sBuffer);
                 if (sBuffer.length() != 0) {
                     break;
                 }
             }
             String[] split = sBuffer.toString().replaceAll(",$", "").split("\\,");
             return split;
         }

         return null;
     }

     @Test
     public void testGetMaxSameString(){
         String str1 = "abcwerthello1yuiodefabcdef";
         String str2 = "cvhello1bnmabcdef";
         String[] maxSameStrings = getMaxSameString1(str1, str2);
         System.out.println(Arrays.toString(maxSameStrings));

     }

 }

字符串String类常见算法题的更多相关文章

  1. Java Object类 和 String类 常见问答 6k字+总结

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  2. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

  3. 《java入门第一季》之类(String类常见方法小叙)

    String类下面的构造方法和一些常见的方法: /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,可以知道 * A:字符串字面值"abc&quo ...

  4. 【java】String类常见操作

    秋招做题需要,总结String类常用api如下: 简单的:str.length().str.isEmpty().str.split(“;”)切割 1.字符串反转:借助StringBuilder/Str ...

  5. [Swift]字符串(String类、NSString类)常用操作

    NS是Cocoa类对象类型的前缀,来源于乔布斯建立的另一家公司--NeXTNSString的使用方法,和Swift语言中的String有很多相似之处. 1.字符串的定义String类 var str1 ...

  6. 整理string类常见方法的使用说明

    整理String类的Length().charAt().getChars().replace().toUpperCase().toLowerCase().trim().toCharArray()使用说 ...

  7. 字符串String类

    1. String类是一个密封类.用关键字sealed修饰: 2. 字符串的两个特性:     ·不可变性:string类型变量,一旦声明就表明它是不会被改变的.因此,string中的方法对strin ...

  8. Java入门篇(五)——Java的字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

  9. Java入门篇(五)——字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

随机推荐

  1. svg和canvas比较以及svg简单介绍

    文章地址:https://www.cnblogs.com/sandraryan/ 什么是svg 可缩放矢量图形(Scalable Vector Graphics) 1. 一种使用XML描述的2D图形语 ...

  2. Python--day46--用户管理设计方案介绍

    1,基于用户权限管理: 2,基于角色的权限管理: 开始一个项目如果要100天的,可能70天都在设计,比如设计数据库表结构,最后30天才是写代码.设计是最难的,写代码是最简单的. 还有一个重要的一点,写 ...

  3. C# 单例类

    单例类 有时候我们不要在一个程序中创建太多的实例.只想用一个全局的实例和一个可以访问点.那么我们需要一个单例类. 因为是单例类啦,所以构造函数肯定是私有的. 需要了解的术语 懒汉式 顾名思义.什么时候 ...

  4. linux scull 的内存使用

    在介绍读写操作前, 我们最好看看如何以及为什么 scull 进行内存分配. "如何"是需要全 面理解代码, "为什么"演示了驱动编写者需要做的选择, 尽管 sc ...

  5. Vue-axios 在vue cli中封装

    common/post.js import axios from 'axios' // 引入axios import qs from 'qs' // 引入qs axios.defaults.baseU ...

  6. P1007 N钱M鸡问题

    题目描述 已知公鸡 \(5\) 元钱一只,母鸡 \(3\) 元钱一只,小鸡 \(3\) 只 \(1\) 元钱. 告诉你一个整数 \(n(1 \le n \le 1000)\) ,你现在要花 \(n\) ...

  7. 【u107】数字游戏(bds)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行 ...

  8. vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)

    [注]:  popstate 事件 a.当活动历史记录条目更改时,将触发popstate事件. b.如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对his ...

  9. 树莓派4安装ftp服务端

    vsftpd是开源的轻量级的常用ftp服务器.   1,安装vsftpd服务器 (约400KB) sudo apt-get install vsftpd     2,启动ftp服务 sudo serv ...

  10. Hibernate管理Session

    Hibernate自身提供了三种管理Session对象的方法 Session对象的生命周期与本地线程绑定 Session对象的生命周期与JTA事务绑定 Hibernate委托程序管理Session对象 ...