首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行特殊回文字符串程序失败的测试用例

执行特殊回文字符串程序失败的测试用例
EN

Stack Overflow用户
提问于 2019-04-15 02:41:24
回答 1查看 164关注 0票数 0
  • 我试图解决黑客排名问题,以计算字符串中包含的特殊回文字符串的数量。
  • 对于特殊回文字符串,所有字符都应该相同,除中间字符外,所有字符都是相同的
  • 例如,string = asasd,那么回文字符串是{a,s,a,s,d,asa,sas}
  • 在这个程序中,两个测试用例分别用字符串asasd和aaaa传递。
  • 一个测试用例失败的字符串for阿里巴巴
  • 我研究检查第二种情况,但我对执行死刑感到震惊。
  • 你们能帮我解决你们的建议吗?
  • 提供以下全部代码:
代码语言:javascript
复制
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class MyClass {
    public static void main(String args[]) {
        int counter=0;
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // read an integer from input stream.
        String s = scanner.next();
        char string_array[] = s.toCharArray();
        for(int i=0; i<s.length(); i++){
            for(int j=i; j<=s.length(); j++){
                if(i != j){
                    String s1 = s.substring(i,j);
                    String rev = "";
                    for(int z=0; z<s1.length(); z++){
                    rev = rev + s1.charAt(s1.length()-1-z);
                    }
                    //System.out.println("s1=" + s1 +  "rev=" + rev);
                    int count = s1.compareTo(rev);
                    if(count == 0){
                    counter++;
                }
                }
            }

        }
        System.out.println(counter);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 04:51:52

您的算法没有检查字符相等的特殊回文要求。以下算法添加了这样的检查:

代码语言:javascript
复制
public class MyClass {
    public static void main(String args[]) {
        int counter=0;
        String s = "abcbaba";
        char string_array[] = s.toCharArray();
        for(int i=0; i<s.length(); i++){
            for(int j=i; j<=s.length(); j++){
                if(i != j){
                    String s1 = s.substring(i,j);
                    String rev = "";
                    char complianceChar = s1.charAt(0);
                    boolean isSpecialPalindrom = true;
                    boolean isLengthEven = s1.length()%2==0;
                    for(int z=0; z<s1.length(); z++) {
                        char c = s1.charAt(s1.length()-1-z);
                        rev = rev + c;
                        boolean isMiddleChar = (z == (s1.length()-1)/2);
                        if(isSpecialPalindrom && (isLengthEven || !isMiddleChar)) {
                            isSpecialPalindrom = (c == complianceChar);
                        }
                    }
                    int count = s1.compareTo(rev);
                    if(count == 0 && isSpecialPalindrom){
                        System.out.println(rev);
                        counter++;
                    }
                }
            }
        }
        System.out.println(counter);
    }
}

产出如下:

代码语言:javascript
复制
a
b
bcb
c
b
bab
a
aba
b
a
10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55681962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档