java求子串,Java求子串出现次数(华为机试题)

比如"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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值