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. 【DCN】路由操作

    offset */interface in/out access-list/prefix-list <1-16>                 // 修改路由偏移量   RIP偏移列表 ...

  2. 原生js实现选字游戏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. [转]JavaWeb工程 目录结构

    今天为此事纠结了一段时间. 以下是mavaen推荐的项目目录. ├── pom.xml └── src     ├── main     │   ├── java     │   │   └── my ...

  4. Vue的事件修饰符

    转载于:https://www.cnblogs.com/xuqp/p/9406971.html 事件处理 如果需要在内联语句处理器中访问原生DOM事件.可以使用特殊变量$event,把它传入到meth ...

  5. win10 uwp 使用 LayoutTransformer

    如果需要使用旋转,那么很容易把图片旋转的布局被裁剪.如果需要旋转的控件还在指定的 Grid 内,就需要使用布局的旋转.本文告诉大家如何使用 LayoutTransformer.需要知道,uwp是没有 ...

  6. H3C IPv6地址解析

  7. 通过作用域链解析js函数一些难以理解的的作用域问题

    基本原理 js函数在执行时,系统会创建一个隐式的属性scope,scope中存储的是函数的作用域链. 通过对这个scope的分析,就能解释JavaScript中许多难以理解的问题: 例1: funct ...

  8. CF1146G Zoning Restrictions

    CF1146G Zoning Restrictions 网络流 h<=50? 直接都选择最大的,ans=n*h*h 最小割 考虑舍弃或者罚款 有一个>x就要罚款? 经典取值限制的模型:切糕 ...

  9. dotnet 修复找不到 System.ServiceProcess 定义

    本文告诉大家如果复制网上一段代码发现 System.ServiceProcess 提示找不到方法或定义,需要手动添加引用 例如下面一段代码 using System.ServiceProcess; p ...

  10. WPF TreeView 展开到指定节点

    最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下. 展开代码如下,其中 SwitchTree是treeview空间的名称 ...