Java基础 String 裸暴力算法- 五个小练习
之间的博客,承上启下:
Java基础 String/StringBuff 常用操作方法复习/内存分析
Java数组直接选择排序、sort()排序
Java基础 String 算法 - 五个练习题目要求:
/**
1.模拟一个trim方法,去除字符串两端的空格。
2.将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”
*/
/**
3.获取一个字符串在另一个字符串中出现的次数。
比如:获取“ ab”在 “abkkcadkabkebfkabkskab”中出现的次数.
4.获取两个字符串中最大相同子串。比如:
str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
提示:将短的那个串进行长度依次递减的子串与较长
的串比较。
5.对字符串中字符进行自然顺序排序。
提示:
1)字符串变成字符数组。
2)对数组排序,选择,冒泡,Arrays.sort();
3)将排序后的数组变成字符串。
*
*/
算法代码:(全为裸的暴力代码,)
import java.lang.reflect.Array;
import java.util.Arrays; public class Test_String {
public static void main(String[] args) {
//1.
myTrim(" 12 123 234 ");myTrim("12 123 234 ");
myTrim("12 123 234");myTrim(" ");
//2.
RevString("123456",1,4);
RevString("123456",3,5);
RevString("123456",5,5);
//3.
CountSubStr("ab","abkkcadkabkebfkabkskab");
CountSubStr("abkkcadkabkebfkabkskab","abkkbkebfkabkskab");
CountSubStr("abkkcadkabkebfkabkskab","abkkcadkabkebfkabkskab");
//4.
CountLongestSubStr("abkkcadkabkebfkabkskab","abkkbkebfkabkskab");
CountLongestSubStr("4564698719","145764987134874364");
//5.
SortStr("46541324asdvdsd");
SortStr("465asdAA41324asdvdsd");
}
//1.模拟一个trim方法,去除字符串两端的空格。
public static void myTrim(String str){
int start=0,endd=str.length()-1;
char[] s= str.toCharArray();
for(int i=0;i<endd;i++){
if(s[i]==' ')
start++;
else
break;
}
for(int i=endd;i>=start;i--){
if(s[i]==' ')endd--;
else
break;
}
String s2=new String(s,start,endd-start+1);
System.out.println("myTrim() :["+str+"] -->["+s2+"]");
}
//2.将一个字符串进行反转。将字符串中指定下标的部分进行反转
public static void RevString(String str,int st,int ed){
char[] s= str.toCharArray();
int len=str.length();
if(st<0||ed>=len||st>ed){
System.out.println("Range Error!");return ;
}
for(int i=st,j=ed;i<j;i++,j--){
char temp=s[i];
s[i]=s[j];
s[j]=temp;
}
String ss=new String(s);
System.out.println("RevString() "+str+"--指定下标反转-->"+ss);
}
//3.获取一个字符串s1在另一个字符串s2中出现的次数。
public static int CountSubStr(String str1,String str2) {
char[] s1= str1.toCharArray();int len1=str1.length();
char[] s2= str2.toCharArray();int len2=str2.length();
//枚举母串的起点和终点的位置,进行裸匹配
int cnt=0;
for(int i=0;i<s2.length;i++){
int j=i+len1-1;
if(j>=len2){
break;
}
int flag=0;
for(int k=i;flag==0 && k<=j;k++){
if(s1[k-i]!=s2[k])
flag=1;
}
if(flag==0){
cnt++;
// System.out.println("****"+i+" "+j);
}
}
System.out.println("CountSubStr() "+str1+" in "+str2+" counting "+cnt+" times!");
return cnt;
}
public static int CountSubStr2(String str1,String str2) { //为第四题做准备,只是删去了输出!
char[] s1= str1.toCharArray();int len1=str1.length();
char[] s2= str2.toCharArray();int len2=str2.length();
//枚举母串的起点和终点的位置,进行裸匹配
int cnt=0;
for(int i=0;i<s2.length;i++){
int j=i+len1-1;
if(j>=len2){
break;
}
int flag=0;
for(int k=i;flag==0 && k<=j;k++){
if(s1[k-i]!=s2[k])
flag=1;
}
if(flag==0){
cnt++;
// System.out.println("****"+i+" "+j);
}
}
return cnt;
}
//4.获取两个字符串中最大相同子串
public static void CountLongestSubStr(String sonstr,String str){
char[] s1= sonstr.toCharArray();
char[] s2= str.toCharArray();
int ans_len=0; ///解决思路:直接枚举子串的所有子串,然后一一跟母串进行匹配
String ansString="";
for(int i=0;i<s1.length;i++){
for(int j=i+1;j<s1.length;j++){
int num=CountSubStr2(new String(s1,i,j-i+1),str);
if(num>0&&ans_len<(j-i+1)){
ans_len=j-i+1;
ansString=new String(s1,i,j-i+1);
}
}
}
System.out.println("CountLongestSubStr() "+sonstr+" & "+str+" is ["+ansString+
"],len is "+ans_len);
} //5.字符串变成字符数组。2)对数组排序
public static void SortStr(String str){
char s[]=str.toCharArray();
Arrays.sort(s);
System.out.println("SortStr() "+str+"-->"+ "["+new String(s)+"]" );
}
}
输出结果:
myTrim() :[ 12 123 234 ] -->[12 123 234]
myTrim() :[12 123 234 ] -->[12 123 234]
myTrim() :[12 123 234] -->[12 123 234]
myTrim() :[ ] -->[]
RevString() 123456--指定下标反转-->154326
RevString() 123456--指定下标反转-->123654
RevString() 123456--指定下标反转-->123456
CountSubStr() ab in abkkcadkabkebfkabkskab counting 4 times!
CountSubStr() abkkcadkabkebfkabkskab in abkkbkebfkabkskab counting 0 times!
CountSubStr() abkkcadkabkebfkabkskab in abkkcadkabkebfkabkskab counting 1 times!
CountLongestSubStr() abkkcadkabkebfkabkskab & abkkbkebfkabkskab is [bkebfkabkskab],len is 13
CountLongestSubStr() 4564698719 & 145764987134874364 is [9871],len is 4
SortStr() 46541324asdvdsd-->[12344456adddssv]
SortStr() 465asdAA41324asdvdsd-->[12344456AAaaddddsssv]
测试结果正确不代表算法完全正确, 本文章仅供参考!
Java基础 String 裸暴力算法- 五个小练习的更多相关文章
- Java基础String的方法
Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值); ...
- Java基础—String构造方法
Java基础--String构造方法 public String(): 创建一个空表字符串对象,不包含任何内容 public String(char[]chs): 根据字符数组的内容,来创建字符串对象 ...
- Java基础——String
前言 从去年八月末开始工作一年了,有了大半年的java开发经验,自认为比在大学时期编码能力强了很多,但是基础方面概念模糊的地方感觉越来越多了 (:´д`)ゞ 所以,我准备把这些问题以及工作中遇到的问题 ...
- java基础-String不可变的好处
一.java内部String类的实现: java 8: public final class String implements java.io.Serializable, Comparable< ...
- Java基础 -- String,StringBuilder,StringBuffer三者的区别
结论 1-String,StringBuilder,StringBuffer 之间的区别主要是在两个方面,即运行速度和线程安全这两方面: 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:St ...
- Java基础—String总结
特点 String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. String实 ...
- java基础——String的常用方法
java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); i nt le ...
- java基础 String
标准格式:数据类型[] 数组名称 = new 数据类型[] {元素1,元素2,...};省略格式:数据类型[] 数组名称 = {元素1,元素2,...}; Scanner类实现的功能,可以实现键盘输入 ...
- Java基础 String/StringBuff/StringBuilder 常用操作方法复习/内存分析/三者的效率比较
附:jdk1.8使用IDEA安装.创建.使用JUnit单元测试 笔记总结: /**String 复习 * 1.像C++这样的char arr[]="..." 的方式无法声明Java ...
随机推荐
- 最新 荔枝java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.荔枝等10家互联网公司的校招Offer,因为某些自身原因最终选择了荔枝.6.7月主要是做系统复习.项目复盘.LeetCode ...
- CentOS系统安装配置JDK
我们可以通过xftp工具将jdk文件上传至CentOS系统指定文件夹中 一.安装jdk 进入jdk存放目录,将jdk解压至install文件夹中: tar -zxf jdk-8u151-linux-x ...
- 论文阅读 | Transformer-XL: Attentive Language Models beyond a Fixed-Length Context
0 简述 Transformer最大的问题:在语言建模时的设置受到固定长度上下文的限制. 本文提出的Transformer-XL,使学习不再仅仅依赖于定长,且不破坏时间的相关性. Transforme ...
- Mac OS X下把 /etc/sudoers 写错了怎么办?(转载https://blog.csdn.net/robertsong2004/article/details/53725285)
重要的事情先说一下,首先为了回避这个问题,一定要用 visudo 来改 /etc/sudoers 文件. 问题描述: 1. 用 sudo vi 直接改 /etc/sudoers 并覆盖原文件. 2. ...
- win10系统,jdk环境变量配置,编辑系统变量窗口显示旧版单行和新版列表问题
大家好,今天说一下我在配置jdk环境变量时遇到的编辑系统变量窗口显示问题. 首先我们说一下如何配置jdk环境变量. 右击此电脑,点击属性. 跳出如下窗口,点击高级系统设置. 跳出如下窗口,点击环境变量 ...
- SrpingBoot入门到入坟02-HelloWorld的细节和初始自动配置
关于SpringBoot的第一个HelloWorld的一些细节: 1.父项目 首先查看项目中的pom.xml文件 文件中有个父项目,点进去则: 它里面也有一个父项目,再点进去: 可以发现有很多的依赖版 ...
- docker&k8s-配置/常用命令
kubectl delete deployment,ingress,svc demo-mml-jp-ylmopt-web-1 -n demo-mml #删除预生产环境mml组ylmopt-web ...
- python之文件读写操作笔记
对不同类的文件操作,需要调用相关的库文件,一般情况下,可以选择建立:写文件函数和读文件函数.在写文件与读文件函数中 我们可以采用:with open('文件名','w', encoding='utf ...
- TZOJ数据结构实验:左叶子之和
int sumOfLeftLeaves(struct TreeNode* root) { if (root == NULL) { ; }//递归结束条件 if (root->left & ...
- Python使用datetime来判断近七天
目录 strptime 使用strptime来格式化字符串 datetime.datetime.strptime("2019-10-02", "%Y-%m-%d" ...