字符串String类常见算法题
2024-09-04 21:44:13
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)); } }
最新文章
- 运行Shell脚本的几种方式解析
- iframe详细的使用
- cut命令
- SSIS WITH VERTICA的注意事项总结
- hdu 1166 敌兵布阵--BIT
- eclipse中的tomcat debug模式启动报超时45s
- bitmap的实现方法
- 使用Reveal.app调试整个项目UI时间,增加LD指令 -Objc引起项目中多个静态库冲突问题
- Java系列--第三篇 基于Maven的Android开发CAIO
- OSCLI
- 配置FindBugs和常见FindBugs错误
- 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例
- Java 反射和内省实现spring的IOC和DI
- Select标签 根据value值默认选中 Jquery
- java-将评论内容过滤特殊表情emoj符号,保存到mysql中
- spring mvc 参数绑定
- SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)
- 克隆虚拟机重启之后eth0不见的解决方案
- Java的图形用户界面的基本工具
- 转 UNIGUI安装教程、使用例子