比如"aaaa" 的子串"aa"出现3次
package com.handy.ds;
import java.util.Stack;
import java.util.Arrays;
;
public class TestString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestString ts = new TestString();
System.out.println(ts.compareTo1("abababab", "bab"));
System.out.println(ts.compareTo2("abababab", "bab"));
System.out.println(ts.compareTo3("abababab", "bab"));
}
// 想法:如str1=ababac,str2=ab
// 往后取str1的所有str2长度(2)的组合,ab,ba,ab,ba,ac
// 将这些组合分别与str2比较,相等则count+1
public String compareTo1(String str1, String str2) {
String ss = null;
int count = 0;
for (int i = 0; i <= str1.length() - str2.length(); i++) {
ss = str1.substring(i, i + str2.length());
if (ss.equals(str2))
count++;
}
return String.valueOf(count);
}
// 想法:如str1=ababac,str2=ab
// 往后取str1的所有2长度(2)的组合,ab,ba,ab,ba,ac
// 将这些组合分别与str2比较,相等则count+1
// 跟第一种方法类似,不过用栈来存罢了
public String compareTo2(String str1, String str2) {
Stack s = new Stack();
int count = 0;
for (int i = 0; i <= str1.length() - str2.length(); i++) {
s.add(str1.substring(i, i + str2.length()));
}
int i = 0;
while (s.size() != 0) {
if (s.pop().toString().equals(str2))
i++;
}
return String.valueOf(i);
}
// 想法:找到str1中与str2第一个字母相同的位置,然后往后取与str2相同长度的子串,和str2比较,相等则count+1
// 如str1=abcab,str2=ab, str1中a与str2的a相同,往后取ab,与str2相等,count+1
// 然后取bc,ca,ab 又有一个ab 故count=2
public String compareTo3(String str1, String str2) {
int count = 0;
int i = 0;
String temp = null;
char c;
boolean isCount = false;
if (str1.length() < str2.length())
return "0";
while (str2.length() + i <= str1.length()) {
c = str1.charAt(i);
if (c == str2.charAt(0)) {
temp = str1.substring(i, i + str2.length());
isCount = true;
} else
isCount = false;
if (isCount && temp.equals(str2))
count++;
i++;
}
return String.valueOf(count);
}
}