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. Python--day19--os模块

    os模块 os模块是与操作系统交互的一个接口 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删 ...

  2. java什么是跨平台性?原理是什么?

    所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行. 实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行 ...

  3. tp5 thinkphp5 多表关联查询 join查询

    model下: $res = \think\Db::name('article') ->alias("a") //取一个别名 ->join('admin ad','a. ...

  4. zoj 3652 Maze

    Maze Time Limit: 2 Seconds      Memory Limit: 65536 KB Celica is a brave person and believer of a Go ...

  5. python基础七之集合

    集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复. 增加 set1 = {'zxc', 'zxf'} set1.add('zxv') # 无序添加 set1.update('zx ...

  6. P1047 汉诺塔

    题目描述 汉诺塔是根据一个印度传说形成的数学问题:有三根杆子A, B, C, A杆上有n个穿孔圆盘, 盘的尺寸由下到上依次变小. 要求按照下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘 大盘不能叠 ...

  7. Linux 内核设备驱动

    设备模型跟踪所有对系统已知的驱动. 这个跟踪的主要原因是使驱动核心能匹配驱动和新 设备. 一旦驱动在系统中是已知的对象, 但是, 许多其他的事情变得有可能. 设备驱动可 输出和任何特定设备无关的信息和 ...

  8. 【2016常州一中夏令营Day4】

    小 W 走迷宫[问题描述]小 W 被小 M 困在了一个方格矩阵迷宫里,矩阵边界在无穷远处,我们做出如下的假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上:b. 走过的格子立即塌陷无 ...

  9. codeforces 540E 离散化技巧+线段树/树状数组求逆序对

    传送门:https://codeforces.com/contest/540/problem/E 题意: 有一段无限长的序列,有n次交换,每次将u位置的元素和v位置的元素交换,问n次交换后这个序列的逆 ...

  10. Java 学习笔记(4)——面向对象

    现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...