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. js保存图片到手机相册

    /保存到相册 function savePic(){ var picurl= $("#picurl").attr("src"); //alert(picurl) ...

  2. jq常用事件

    https://www.cnblogs.com/sandraryan/ click(); 点击事件 dblclick(); 双击事件 $('.box').dblclick(function(){ al ...

  3. axis2 wsdl2java工具

    wsdl2java工具使用方法描述: C:\Users\Administrator>wsdl2java -h Using AXIS2_HOME: E:\Apache_Projects\axis2 ...

  4. 下推栈实现(c++编程思想 p136)

    1 头文件Stack.h #ifndef STACK_H #define STACK_H struct Stack { struct Link { void* data; Link* next; vo ...

  5. [C++] 获取IE代理服务器的账号密码

    很多程序需要使用'浏览器设置'的代理服务器,IE设置的代理服务器有可能是需要账号密码的.怎样编程获取浏览器设置的代理服务器的账号密码呢? InternetQueryOption(NULL, INTER ...

  6. Python--day32--struct模块定制报头理论(什么是网络协议?网络协议的本质是什么?)

  7. P1071 01字符串的交叉安排

    题目描述 你有 \(n(1 \le n \le 10^6)\) 个字符'0' 和 \(m(1 \le m \le 10^6)\) 个字符'1'.你需要使用这些字符拼接成一个01字符串,使得满足如下两个 ...

  8. hdu 6579 Operation (在线线性基)

    传送门 •题意 一个数组a有n个数 m个操作 操作① 询问$[l,r]$区间的异或值 操作② 在数组末尾追加一个数x,数组长度变为$n+1$ 其中$l,r$不直接给出,其中$l=l%n+1,r=r%n ...

  9. HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具

    今天早上曽根セイラ告诉我一个好用的工具 HttpRepl 这是一个可以在命令行里面对 RESTful 的 HTTP 服务进行路由跳转和访问的命令行工具.可以使用 cd 这个命令和像文件跳转已经跳转到下 ...

  10. C#面试题整理(不带答案)

     1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么?  2.什么是事务?什么是锁?  3.什么是索引,有什么优点?  4.视图是什么?游标是什么?  5.什么是存储过程?有什么优 ...