![](/img/trans.png)
[英]Count the number of times a character appears in a contiguous manner in a string
[英]count number of times aaa appears in a string with and with overlaping
计算aaa
在字符串中出现的次数:1。不重复; 2。允许重复。 我尝试了下面的代码,它在第一种情况下效果很好,但在第二种情况下效果不好。
public static void main(String[] args) {
String str="cbaadaaabefaaaag";
int count=0,count1=0;
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='a' && str.charAt(i+1)=='a' && str.charAt(i+2)=='a')
{
count++;
}
}
System.out.println(count);
for(int i=0;i<str.length();i++)
{
if(i==0)
{
if(str.charAt(i)=='a' && str.charAt(i+1)=='a' && str.charAt(i+2)=='a')
{
count1++;
}
}
else
{
if(str.charAt(i-1)=='a' && str.charAt(i)=='a' && str.charAt(i+1)=='a')
{
count1++;
}
}
}
System.out.println(count1);
}
我试图输入是cbaadaaabefaaaag
这应该给3为第一壳体和2第二情况下,也当输入为aaaa
它应该是为1的情况下第一和2 overlaping情况。
此代码应帮助您:
public static void main(String args[]) throws Exception {
String str = "cbaadaaabefaaaaaaag";
System.out.println(count(str, true));
System.out.println(count(str, false));
}
public static int count(String str, boolean overlap) {
int count = 0;
for (int i = 0; i < str.length() - 2; i++) {
if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a'
&& str.charAt(i + 2) == 'a') {
if (!overlap) {
i += 2;
}
count++;
}
}
return count;
}
条件i < str.length() - 2
确保您不会收到StringIndexOutOfBoundsException
,因为如果字符串中只剩下两个字符,则不会有另一个子字符串aaa
。
重叠条件将两个加到当前索引中,在该位置找到了子字符串aaa
,因此索引指向最后找到的序列aaa
之后的下一个字符,这防止了重叠。
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
String str = scn.nextLine();
int count = 0, count1 = 0;
for (int i = 0; i < str.length() - 2; i++) {
if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a' && str.charAt(i + 2) == 'a') {
count++;
}
}
System.out.println(count);
for (int i = 0; i <= str.length() -1; i++) {
if (str.charAt(i) == 'a' && str.charAt(i + 1) == 'a' && str.charAt(i + 2) == 'a') {
i += 2;
count1++;
}
}
System.out.println(count1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.