毕老师的问题:
4. 获取两个字符串中最大相同子串,第一个动作:讲短的那个串进行长度依次递减的子串的打印
思路:
1.将短的那个子串按照长度递减的方式获取到
2.将每次获取到的子串去长串中判断是否包含
如果包含,已经找到!
疑问:
String str = "abcdefghigklmnkhjtfdsaw";
String str1 = "d bcdefghi c cdefghig";
上面两个字符串中最大相同子串其实有两个“bcdefghi”和“cdefghig”,
我的程序要怎么修改才能正确找出这两个子串呢?
悲剧,人太笨了,想了好半天,结果大脑当机了,想去死。都是跟着老师的课程走,可素为毛我总和老师的思路相左啊,。✖_✖。✖_✖。✖_✖。也许我有点钻牛角尖了,不过大家帮我看看吧!我想实现的是找出字符串中所有的最大相同子串,自己想了半天就想出了一个方法来,大家还有什么比较好的方法么?给点建议,谢谢!
附上代码:- class StringTest
- {
- //主函数
- public static void main(String[] args)
- {
- //String str = "abghigfdkljtsawddcdefdddddddddddeddd";
- //String str1 = "d cdef c kljt d tsaw b fdkl";
- String str = "abcdefghigklmnkhjtfdsaw";
- String str1 = "d bcdefghi c cdefghig";
- getMaxString(str,str1);
- }
- //打印功能
- public static void sop(Object str)
- {
- System.out.println(str);
- }
- public static void getMaxString(String str1,String str2)
- {
- 思路:比较str1与str2长度,用短的那个字符串来一次递减长度,看长的那个是否包含短的那个字符串
- boolean contains()
- for循环中,三个变量,numOfChar,beginIndex,endIndex 的含义
- x代表字符串2减少的字符数
- beginIndex 代表减少字符后获取子串的起始坐标
- endIndex 代表减少字符后获取子串的结束坐标
- String min ="";
- String max = "";
- int flag = 0;//用于获取首次遇到相同子串的时候,减少的字符数。之后把它用于循环中检查减少该字符数后是否还有其他相同子串。
- if(str1.length()>str2.length())
- {
- min = str2;
- max = str1;
- }
- out:for(int numOfChar = 0;numOfChar<min.length();numOfChar++)
- {
- flag = numOfChar;
- //sop(flag);
- for(int beginIndex = 0,endIndex=min.length()-numOfChar;endIndex<min.length()+1;)
- {
- //if(max.contains(min.substring(beginIndex,endIndex)))
- //sop(min.substring(beginIndex,endIndex));
- if(max.contains(min.substring(beginIndex,endIndex)))
- {
- min.substring(beginIndex,endIndex);
- break out;
- }
- beginIndex++;
- endIndex++;
- }
- }
- for(int beginIndex = 0,endIndex=min.length()-flag;endIndex<min.length()+1;)
- {
- if(max.contains(min.substring(beginIndex,endIndex)))
- {
- sop(min.substring(beginIndex,endIndex));
- }
- beginIndex++;
- endIndex++;
- }
- }
- }
复制代码 |